1. 程式人生 > >【學習筆記】〖九度OJ〗題目1443:Tr A

【學習筆記】〖九度OJ〗題目1443:Tr A

題目1443:Tr A

時間限制:1 秒

記憶體限制:128 兆

特殊判題:

提交:283

解決:168

題目描述:

A為一個方陣,則Tr A表示A的跡(就是主對角線上各項的和),現要求Tr(A^k)%9973。

輸入:

資料的第一行是一個T,表示有T組資料。
每組資料的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)兩個資料。接下來有n行,每行有n個數據,每個資料的範圍是[0,9],表示方陣A的內容。

輸出:

對應每組資料,輸出Tr(A^k)%9973。

樣例輸入:
2
2 2
1 0
0 1
3 99999999
1 2 3
4 5 6
7 8 9
樣例輸出:
2
2686
本題難度不大,定義了矩陣類,過載了乘法運算子,求冪部分利用了二分求冪法以節省時

間。

#include<iostream>
using namespace std;
#define MOD 9973

class Matrix
{
public:
	int m[11][11];
	int n;//方陣的行數
	int tr;
	Matrix()
	{
		tr = 0;
		for (int i=0; i<11; i++)
		{
			for (int j=0; j<11; j++)
			{
				m[i][j] = 0;
			}
		}
	}
	Matrix(int n)
	{
		tr = 0;
		this->n = n;
		for (int i=0; i<n; i++)
		{
			for (int j=0; j<n; j++)
			{
				m[i][j] = 0;
			}
		}

	}
	void getT(int n)
	{

		tr=0;
		for (int i=0; i<n; i++)
		{
			tr = (tr + m[i][i])%MOD;
		}
	}

	Matrix operator * (const Matrix a) const
	{
		Matrix res;
		res.n = n;
		for (int i=0; i<n; i++)
		{
			for (int j=0; j<n; j++)
			{
				res.m[i][j] = 0;
				for (int k=0; k<n; k++)
				{
					res.m[i][j] = (res.m[i][j] + (m[i][k] * a.m[k][j]) % MOD) % MOD;
				}
			}
		}
		return res;
	}
};


int main()
{
	freopen("input.in", "r", stdin);
	freopen("output.out","w", stdout);

	int num;
	while (cin >> num && num!=0)
	{
		
		int n, k, i, j, x, y, z;
		for (i=0; i<num; i++)//每組一次
		{

			//輸入部分
			cin >> n >> k;
			Matrix mtx(n);
			for (x=0; x<n; x++)
			{
				for (y=0; y<n; y++)
				{
					cin >> mtx.m[x][y];
				}
			}

			//計算部分
			int tmp = k;
			Matrix res(n);
			for (z=0; z<n; z++)
			{
				res.m[z][z] = 1;
			}
			while (k>0)
			{
				if (k%2 == 1)
				{
					res = res * mtx;
				}
				mtx = mtx*mtx;
				k/=2;
			}
			res.getT(n);
			cout << res.tr << endl;
		}//end of for
	}//end of while

	return 0;
}


相關推薦

學習筆記OJ題目1443Tr A

題目1443:Tr A 時間限制:1 秒 記憶體限制:128 兆 特殊判題:否 提交:283 解決:168 題目描述: A為一個方陣,則Tr A表示A的跡(就是主對角線上各項的和),現要求Tr(A^k)%9973。 輸入: 資料的第一行是一個T

學習筆記OJ題目1156誰是你的潛在朋友

題目1156:誰是你的潛在朋友 時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:2594 解決:1214 題目描述:     “臭味相投”——這是我們描述朋友時喜歡用的詞彙。兩個人是朋友通常意味著他們存在著許多共同的興趣。然而作為一個宅

學習筆記OJ題目1446Head of a Gang

題目1446:Head of a Gang 時間限制:1 秒 記憶體限制:128 兆 特殊判題:否 提交:622 解決:144 題目描述: One way that the police finds the head of a gang is to

學習筆記OJ題目1186列印日期

題目1186:列印日期 時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:2549 解決:918 題目描述: 給出年分m和一年中的第n天,算出第n天是幾月幾號。 輸入: 輸入包括兩個整數y(1<=y<=3000),n(1&

學習筆記OJ題目1464Hello World for U

題目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "helloworld" can be printed as:

學習筆記65~百看到的比較好的Android原始碼學習路徑

我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。    先說下我的入門過程:    第零步,下載原始碼,我下的4.2的,框架層原始碼10G,核心2G多,ctags給框架層建的標籤檔案都有600M,當時

學習筆記PAT1003. Emergency (25)

As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads

學習筆記Jaccard相似和廣義Jaccard相似

1. 狹義Jaccard相似度,計算兩個集合之間的相似程度,元素的“取值”為0或1 對集合A和B,Jaccard相似度計算如下: Jaccard(A, B)= |A intersect B| / |A union B| 相似度數值在[0, 1]之間,當A==B的時候,為1. 優缺點,就是元素的取值只能是0或

學習筆記python爬取百真實url

python 今天跑個腳本需要一堆測試的url,,,挨個找復制粘貼肯定不是程序員的風格,so,還是寫個腳本吧。 環境:python2.7 編輯器:sublime text 3 一、分析一下 首先非常感謝百度大佬的url分類非常整齊,都在一個

GANs學習筆記)WGAN-GP

6.1 WGAN-GP原理        WGAN待解決的問題是,未能將D真的限制在1-Lipschitz function內。我們不妨觀察一下1-Lipschitz function,會發現它其實等價於如下表達式: 也就是說,對於一個可微函式,當且僅當對於

學習筆記與調和級數相關的時間複雜

宣告:博主寫這個部落格的理由只是為了緩解心情,大部分的東西都是我手推的,沒有驗證過,如果有問題敬請指出。 Noip2018day1完掛,非常難受,過來寫個部落格頹一下,緩解心情 1. 調和級數 調和級數

學習筆記關於DOM4J使用DOM4J解析XML文檔

文本 class 中產 獲取 ber exce int() logs hone 一、概述 DOM4J是一個易用的、開源的庫,用於XML、XPath和XSLT中。采用了Java集合框架並完全支持DOM、SAX、和JAXP。 DOM4J最大的特色是使用大量的接口,主要接口都在o

學習筆記Java中生成對象的5中方法

目標 獲得 cti com pre lan except 我們 highlight 概述:本文介紹以下java五種創建對象的方式: 1.用new語句創建對象,這是最常用的創建對象的方式。 2.使用Class類的newInstance方法 3.運用反射手段,調用java.la

學習筆記SIFT尺度不變特征 (配合UCF-CRCV課程視頻)

rri cnblogs -o mask 畫出 blocks http ucf 產生 SIFT尺度不變特征 D. Lowe. Distinctive image features from scale-invariant key points, IJCV 2004 -Lect

學習筆記String進階StringBuffer類(線程安全)和StringBuilder類

n) static this util double 字符串 對象 ice 單線程 一、除了使用String類存儲字符串之外,還可以使用StringBuffer類存儲字符串。而且它是比String類更高效的存儲字符串的一種引用數據類型。 優點:   對字符串進行連接操作時,

學習筆記使用SQLyog連接MySQL數據庫

comm 丟失 school turn 復合主鍵 price not email pre 一、使用SQLyog創建數據庫用來管理學生信息 1 #創建數據庫student 2 DROP DATABASE IF EXISTS Myschool; 3 CREAT

學習筆記2017年7月18日MySQL測試模擬QQ數據庫

關系 ref sts one database 等級 weight insert phone 模擬測試: QQ數據庫管理 一、創建數據庫並添加關系和測試數據 1 ##創建QQ數據庫,完成簡單的測試 2 3 #創建數據庫 4 DROP DATABASE IF EX

學習筆記C# 構造和析構

成員 int 學習 pri [] func 釋放內存 ring 銷毀 構造方法 構造方法是一個特殊的方法,負責初始化對象 構造方法名必須和類名一致 構造方法沒有返回值,但可以有參數,能夠重載 構造方法可以不寫,系統會自動為類添加一個無參的默認構造 如果將構造方法設置為P

學習筆記C# 靜態類

實例化 namespace [] line str 過程 ole test 數據 靜態修飾符 用static修飾的成員是靜態成員 靜態成員只能由類來調用 用static修飾的類是靜態類 靜態類不能實例化,只能包含靜態成員和const常量 在內存中一共有五個區域 1

學習筆記C# 接口

apple [] oat 訪問 names 使用 foo pub 修飾 使用interface關鍵字定義接口 接口定義一組成員但不直接實現它們 實現接口 實現接口的任何類都必須實現其所有的成員方法 接口不能直接實例化 接口可以包含方法和屬性聲明,不能包含字段 接口中所有