第十四周作業 必做3

2021-10-06 09:32:12 字數 2071 閱讀 6883

題目描述:

q老師 對數列有一種非同一般的熱愛,尤其是優美的斐波那契數列。

當 x < 10 時,f(x) = x;

當 x ≥ 10 時,f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10),ai 只能為 0 或 1。

q老師 將給定 a0~a9,以及兩個正整數 k m,詢問 f(k) % m 的數值大小。

聰明的你能通過 q老師 的考驗嗎?

input

輸出檔案包含多組測試用例,每組測試用例格式如下:

第一行給定兩個正整數 k m。(k < 2e9, m < 1e5)

第二行給定十個整數,分別表示 a0~a9。

output

對於每一組測試用例輸出一行,表示 f(k) % m 的數值大小。

sample input

10 9999

1 1 1 1 1 1 1 1 1 1

20 500

1 0 1 0 1 0 1 0 1 0

sample output

45104

題目分析:

本題就是經典的模板題了,首先把矩陣快速乘法的樣板寫上。

struct matrix}}

return ret;

}matrix()

matrix

(matrix&b)};

matrix quick_pow

(matrix a,

int x)

return ret;

}

然後就是資料處理了,首先如果小於10就是它本身,所以可以直接輸出。

if

(k<10)

然後就要構造矩陣了,很明顯如果把fx,fx-1,fx-2…這些為一列,然後右邊是fx-1,fx-2,fx-3…,那麼中間的資料就是矩陣了,首先第一行就是輸入的a0到a9,其餘的就是在第i行i-1列是1(矩陣從0開始,i從1開始),這樣就構造矩陣完成,只需要對這個矩陣進行運算就可以了。

for

(int i=

0;i<

10;i++

)for

(int i=

1;i<

10;i++

)

然後進行運算求出矩陣。

temp=

quick_pow

(temp,k-9)

;

然後就可以對著第一行求具體的值了,此時由於fx=x,那麼右側那一列就成了9876543210,這樣依次乘以快速乘法得到的矩陣第一行就可以了。不過既然結果說了要模m,就意味著這個數可能很大,所以為了防止溢位,我們每一次操作都要模m,也就是加上之後就模m。

int ans=0;

for(

int i=

0;i<

10;i++

)

**如下:

#include

#include

using

namespace std;

int k,m;

struct matrix}}

return ret;

}matrix()

matrix

(matrix&b)};

matrix quick_pow

(matrix a,

int x)

return ret;

}int

main()

matrix temp;

for(

int i=

0;i<

10;i++

)for

(int i=

1;i<

10;i++

) temp=

quick_pow

(temp,k-9)

;int ans=0;

for(

int i=

0;i<

10;i++

) cout<}}

第十四周作業

nat模式 1.臨時開啟 寫入記憶體,在記憶體中開啟 echo 1 proc sys net ipv4 ip forward 2.永久開啟 寫入核心 在 vim etc sysctl.conf 下 加入此行 net.ipv4.ip forward 1 lvs echo net.ipv4.ip for...

第十四周作業

1 匯入hellodb.sql生成資料庫 mysql uroot p123 h127.0.0.1 p3306 hellodb innodb.sql 1 在students表中,查詢年齡大於25歲,且為男性的同學的名字和年齡 2 以classid為分組依據,顯示每組的平均年齡 3 顯示第2題中平均年齡...

第十四周作業2

includeusing namespace std class student student next int num double score class mylist mylist int n,double s 以student n,s 作為單結點的鍊錶 int display 輸出鍊錶,返...