week14 作業C Q老師的考驗

2021-10-06 10:32:29 字數 2018 閱讀 2775

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老師 的考驗嗎?

輸入:

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

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

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

輸出:

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

樣例輸入:

10 9999

1 1 1 1 1 1 1 1 1 1

20 500

1 0 1 0 1 0 1 0 1 0

樣例輸出:

45104

由於資料k < 2e9, m < 1e5,所以需要用矩陣快速冪來解決。

由公式f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10)可以構造出矩陣。

f

(n) a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 f

(n-1)f

(n-1) 100

0000

000f

(n-2)f

(n-2)0

1000

0000

0f(n-3)f

(n-3)0

0100

0000

0f(n-4)f

(n-4)0

0010

0000

0f(n-5

)ans[n]=f

(n-5)=

0000

1000

00 × f

(n-6)f

(n-6)0

0000

1000

0f(n-7)f

(n-7)0

0000

0100

0f(n-8)f

(n-8)0

0000

0010

0f(n-9)f

(n-9)0

0000

0001

1f(n-10

)

ans[n]=t^(n-9)*ans[9],t是上面10×10的矩陣。

#include

#include

#define ll long long

using

namespace std;

const

int n=10;

ll k,m;

struct matrix}}

return ret;

}matrix()

matrix

(const matrix& t)};

matrix quick_pow

(matrix a,

int x)

while

(x) a=a*a;

x>>=1;

}return ret;

}int

main()

for(

int i=

1;i<

10;i++

) matrix tmp=

quick_pow

(ma,k-9)

; ll ans=0;

for(

int i=

0;i<

10;i++

) cout<'\n';}

}

Week14作業 C Q老師的考驗 矩陣快速冪

q老師 對數列有一種非同一般的熱愛,尤其是優美的斐波那契數列。這一天,q老師 為了增強大家對於斐波那契數列的理解,決定在斐波那契的基礎上建立乙個新的數列 f x 來考一考大家。數列 f x 定義如下 當 x 10 時,f x x 當 x 10 時,f x a0 f x 1 a1 f x 2 a2 f...

Week14 C Q老師的考驗(必做)

week14 c q老師的考驗 必做 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,以及兩個正整數 ...

week14作業E Q老師度假

忙碌了乙個學期的 q老師 決定獎勵自己 n 天假期。假期中不同的穿衣方式會有不同的快樂值。已知 q老師 一共有 m 件襯衫,且如果昨天穿的是襯衫 a,今天穿的是襯衫 b,則 q老師 今天可以獲得 f a b 快樂值。在 n 天假期結束後,q老師 最多可以獲得多少快樂值?輸入 輸入檔案包含多組測試樣例...