九度OJ 1081: 遞推數列
#include <stdio.h> #include <stdlib.h> #define MOD 10000 //結果取MOD,避免高精度運算 /*將矩陣p與矩陣q相乘,結果存入p矩陣*/ void Matrix_mul(int p[2][2], int q[2][2]) { int i, j, k; int t[2][2]={0}; for(i = 0; i <= 1; i++) for(j = 0; j <= 1; j++) for(k = 0; k <= 1; k++) t[i][j] += p[i][k] * q[k][j]; for(i = 0; i <= 1; i++) for(j = 0; j <= 1; j++) p[i][j] = t[i][j] % MOD; } /*計算p矩陣的n次方,結果存入p矩陣*/ void Matrix_cal(int p[2][2], int n) { int i, j; int t[2][2]; for(i = 0; i <= 1; i++) for(j = 0; j <= 1; j++) t[i][j] = p[i][j]; if(n == 1) return; else if(n & 1) { Matrix_cal(p, n-1); Matrix_mul(p, t); } else { Matrix_cal(p, n/2); Matrix_mul(p, p); } } int main() { int a0, a1, p, q, k; while(scanf("%d%d%d%d%d", &a0, &a1, &p, &q, &k) != EOF) { if(k == 0) printf("%d\n", a0); else if(k == 1) printf("%d\n", a1); else { int matrix[2][2] = { {p%MOD, q%MOD}, {1, 0} }; Matrix_cal(matrix, k-1); printf("%d\n", (a1 * matrix[0][0] + a0 * matrix[0][1]) % MOD); } } //system("pause"); return 0; } /************************************************************** Problem: 1081 User: superlc320 Language: C++ Result: Accepted Time:10 ms Memory:1020 kb ****************************************************************/
相關推薦
九度OJ 1081: 遞推數列
#include <stdio.h> #include <stdlib.h> #define MOD 10000 //結果取MOD,避免高精度運算 /*將矩陣p與矩陣q相乘,結果存入p矩陣*/ void Matrix_mul(int p[2][2], int q[2][
九度OJ題目1081:遞推數列解題報告
題目分析1:一個很顯然的想法是遞推計算這k+1個數對10000的模,實現如下:原始碼1(TLE)#include <stdio.h>#include <stdlib.h>#define MOD 10000int main() { int a0, a1, p, q, k;
九度OJ 1482:瑪雅人的密碼
清華 sizeof swap name substr wap 如果 found www 題目描述: 瑪雅人有一種密碼,如果字符串中出現連續的2012四個數字就能解開密碼。給一個長度為N的字符串,(2=<N<=13)該字符串中只含有0,1,2三種數字,問這個字符串
九度OJ-1457:非常可樂
本題也是轉化為狀態建立解答樹並剪枝,然後進行廣度優先搜尋。 Debug記錄: ①找了很久,最後發現是mark陣列的初始化除了問題,原始碼如下: for (int i=1;i<=S;i++){ for (int j=1;j<=N;j++){
九度OJ 1133:學分績點 (加權平均數)
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:1333 解決:702 題目描述: 北京大學對本科生的成績施行平均學分績點制(GPA)。既將學生的實際考分根據不同的學
九度OJ-1208:10進位制 VS 2進位制
本題使用了寫好的高精度整數的模板,將ten2N()函式的輸出方式稍微改了改。 debug過程: ①過載的*運算通過這道題發現了bug:當輸入的int x為0時,由於使用的是BigInt與int逐位乘的演算法,故若BigInt的intSize不為1的話,會return一個
九度OJ 1208: 10進位制 VS 2進位制
#include <stdio.h> #include <stdlib.h> #include <string.h> void swap(int *p, int *q) { int temp; temp = *p; *p = *q; *
九度OJ 1251:序列分割 (DFS)
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:166 解決:34 題目描述: 一個整數陣列,長度為n,將其分為m份,使各份的和相等,求m的最大值 比如{3,2,
九度OJ-1450:產生冠軍
這道題厲害了。= =想不明白 演算法分析: 由於這裡的優先關係具有傳遞性,故可利用有向圖表示優先關係:“A優勝於C”==可抽象為==》“A到C之間存在有向路徑”。有了這層抽象就能進行以下分析: ①“不能出現迴圈優先關係”《==》不能出現環路:進行拓撲排序來檢測有無環
九度OJ 1455: 珍惜現在,感恩生活
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Food //糧食結構體 { int price; int wei
九度OJ 1014:排名 (排序)
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:8267 解決:2469 題目描述: 今天的上機考試雖然有實時的Ranklist,但上面的排名只是根據完成的題數
九度OJ 1052:找x (基礎題)
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:7335 解決:3801 題目描述: 輸入一個數n,然後輸入n個數值各不相同,再輸入一個值x,輸出這個值在這個陣列中的
九度OJ 1008:最短路徑問題 (最短路)
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:8064 解決:2685 題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入
九度OJ-1144:Freckles
依然是最小生成樹問題,使用並查集+kruskal實現。不贅述。 題目描述: In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's b
九度OJ 1003:A+B
時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:15078 解決:6299 題目描述: 給定兩個整數A和B,其表示形式是:從個位開始,每三位數用逗號","隔開。 現在請
九度OJ 1088: 剩下的樹
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int l, m; while(scanf("%d%d", &l, &m) != EOF)
九度Oj 1123: 採藥
題目描述: 辰辰是個很有潛能、天資聰穎的孩子,他的夢想是稱為世界上最偉大的醫師。 為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了一個難題。 醫師把他帶到個到處都是草藥的山洞裡對他說: “孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也
九度OJ 題目1204:農夫、羊、菜和狼的故事
pla pan wol 題目 r+ ear play struct tab 思路:廣度 優先 記錄路徑長度 但是題目的意思好像是要記錄具體路徑 下次再搞吧 題目描述: 有一個農夫帶一只羊、一筐菜和一只狼過河.果沒有農夫看管,則狼要吃羊,羊要吃菜.但是船很小,只
九度OJ-題目1009:二叉搜索樹
提交 二叉排序樹 軟件 amp cpp creat .com xheditor ear 題目1009:二叉搜索樹 從如今開始打算重新啟動刷題征程。程序猿的人生不須要解釋! 這次撇開poj hoj等難度較大的oj系統,從九度入手(已經非常長時間沒寫過代碼
<九度 OJ>題目1012:暢通project
數組下標 find cout set href col 設置 data [] 題目描寫敘述: 某省調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。省政府“暢通project”的目標是使全省不論什麽兩個城鎮間都能夠實現