了不起的鬱楊

2022-09-14 18:30:12 字數 2248 閱讀 8274

【背景】

眾所周知,鬱楊是乙個十分優秀的人,他每天都會用課餘時間想物理問題,以保持對物理火熱般地熱愛。也因此,他的物理成績每次都是95+。有一天我問他:「為什麼你這麼優秀?」,鬱楊紅了臉,很不好意思地對我說了一番話,看起來好像很萌的樣子,說完了我就傻了。

【問題描述】

原來鬱楊說:「成功無捷徑,我每次做題的時候會先規定這題最多想k秒,然後休息一下再想,你可以想像你想問題的時候就像在讀進度條,我每想s秒,那麼這個進度條就會前進s格,只要恰好到了進度條的終點n,那麼我就能把這題解決了!另外,多一秒都不行,要恰好n秒,不然腦子會壞掉的.」;

我:「。。。。」

給出k和n,求出鬱楊解決這道題有多少種姿勢d。

因為d可能很大所以只需輸出其mod 7777777之後的結果就可以了.

//看完樣例說明你就知道我在講什麼了,其中開始時進度條為0,所涉及到的計算都是整數。

【輸入格式】

輸入的第一行為k(1<=k<=10);

輸入的第二行為n(n<=2^31-1);

【輸出格式】

乙個整數,為鬱楊解決這道題的方案數 mod 7777777之後的結果.

【樣例輸入】

2 4

【樣例輸出】

5 【樣例說明】

一共有5種姿勢

(即最多想2秒,也就是說可以想1秒也可以想2秒,只要最後進度條恰好為4即可);

→1→2→3→4

→2→3→4

→2→4

→1→3→4

→1→2→4

【後話】

因為勤於思考鬱楊成就了自己的理想,獲得了人生的成功。

【題解】

顯然有遞推關係

f[n] = f[n-1]+f[n-2]+f[n-3]+…+f[n-k];

但是n巨大.

用迭代的方法雖然可以解決空間問題,但是時間還是會超的。

更優秀的辦法:

用矩陣乘法進行迭代.

構造乙個矩陣

以k = 3為例

[0

10] [f(n-3)] [f(n-2)][00

1] * [f(n-2)] = [f(n-1)] [11

1] [f(n-1)] [f(n)]

[0

10] [f(1)] [f(n-2)][00

1] ^(n-3)* [f(2)] = [f(n-1)] [11

1] [f(3)] [f(n)]

先處理出f[1..k]

然後處理出那個構造矩陣的(n-3)次方。然後就能夠快速獲得f(n)了;

因為n巨大,所以要用快速冪;

記得取模;

當時自己瞎編的背景,現在看到留下的就只有感動了,雖然當時有點幼稚,但很懷念。

#include 

#include

#include

#define ll long long

using

namespace

std;

const

int maxk = 12;

const ll mod = 7777777;

struct abc

;abc temp = ,a;

int k,n;

ll f[maxk];

void input(int &r)

abc jc(abc a, abc b)//矩陣a左乘b

return c;

}abc ksm(int x)//矩陣快速冪

int main()

for (int i = 1; i <= k - 1; i++)

temp.jz[i][i+1] = 1;

for (int i = 1; i <= k; i++)

temp.jz[k][i] = 1;

a = ksm(n - k);

f[11] = 0;

for (int i = 1; i <= k; i++)

f[11] = (f[11]+a.jz[k][i]*f[i])%mod;

printf("%i64d\n", f[11]);

return

0;}

了不起的蓋茨比

這本書是在去長沙的飛機上面開始看的,起先知道這本書是由於小李子演的電影。之後買這本書是由於村上春樹。最近一直很喜歡村上,看過他的書的人都會被一種質樸和真實所吸引,我也不例外。看完之後給我感覺很縹緲,我不知道什麼是真正的成功,不知道什麼是真實的愛情。由於最近遇到一些事情,遇到了我一生都無法忘卻的事情。...

都是壓鬱惹的禍

今天跟著班裡的同學去 春遊 其實跟春天沒什麼關係,重點不在 春 這樣說可能還會讓人誤以為是遊蕩觀賞,其實也不是.只是吃喝玩.就是衝著玩去,大家一起上大學也三年了,光棍一堆,平時生活單調到不行了,班長眼看同學們都可能壓出病來了,其實如果是被美女壓出病來,倒是全中國男人的夢想,可是相反,等了三年,沒發現...

007 008 了不起的分支迴圈

in 是成員資格符 a in asdwrr true標題出處 魚c論壇 score int input 請輸入你的成績 while score 100 elif score 80 and score 60 print c elif score 90 and score 100 print a eli...