1. 程式人生 > >九度OJ 1081: 遞推數列

九度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-120810進位制 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-1144Freckles

  依然是最小生成樹問題,使用並查集+kruskal實現。不贅述。 題目描述:     In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's b

OJ 1003A+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系統,從九度入手(已經非常長時間沒寫過代碼

&lt; OJ&gt;題目1012暢通project

數組下標 find cout set href col 設置 data [] 題目描寫敘述: 某省調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。省政府“暢通project”的目標是使全省不論什麽兩個城鎮間都能夠實現