HDU2276 矩陣遞推

2021-09-12 20:59:47 字數 896 閱讀 3376

1.題目鏈結。題目大意,有n個燈,它們圍城乙個圈,每個燈有兩種狀態,0代表燈沒有開,1代表燈開著。現在做這樣的調整,每一秒,我們檢查這個燈的左邊(就是逆時針相鄰的那個點),如果左邊的點是1,那麼把該點的燈開啟,否則不做變化。問t秒之後所有燈的狀態。

2.這是乙個矩陣的遞推,我們這樣考慮,a[i][j]代表第i秒這個點燈的狀態,1就是開著,0就是關閉。那麼我們在它的狀態一定是這樣來的:(a[i-1][j]+a[i-1][j-1])%2.就是上一輪這個點和它左邊的點決定了此時的狀態,那麼,對於所有的燈,我們可以列出n個這樣的方程,組成乙個方程組,並且寫成矩陣乘積的形式就是(用乙個三維的矩陣為例子):

左邊是初始的狀態,右邊是最終的結果,乘上轉移矩陣即可。所以分析到這裡,就是矩陣快速冪啦。問題解決。

#include#include#includeusing namespace std;

struct sarray

} sarray() {};

sarray operator *(const sarray&a)

}} return tem;

} sarray operator +(const sarray&a)

} return tem;

}};sarray qpow(sarray a, int b)

return tem;

}sarray ans;

int main()

}} sarray tem(len, 0);

for (int i = 0; i < s.size(); i++)

ans = tem * qpow(trans, t);

for (int i = 0; i < len; i++)

cout << endl;

}}

hdu2276 矩陣構造

題意 給了n個燈泡的狀態,他們繞成乙個環,0是滅,1是亮,每一秒燈泡的狀態都會改變,規則是如果當前這個燈泡的左邊的燈泡當前是狀態1,那麼下一秒當前的這個燈泡狀態就改變0變1,1變0,最後問你m秒後的狀態。思路 我們先找當前狀態和下乙個狀態的關係 狀態也就是秒 我們可以抽象成這麼一種關係,如果第i個燈...

快速矩陣冪HDU2276

題意 有n盞燈,編號為1到n。0表示不亮,1表示亮,如果 i th的燈的左邊燈是亮的,那麼下一秒鐘,i th燈的狀態要改變,0變成1,1變成0。第1個燈的 左邊是第n個燈 輸入t,輸入開始的狀態 問你在第t秒時,燈的狀態時什麼樣的,輸出來。分析 可推出下一秒的狀態a i a i 1 n n a i ...

HDU6050 矩陣遞推

source 2017 multi university training contest team 2 題意 給定 n m 求 f 題解 首先對基礎遞推式 f f 2 times f 加乙個sigma,有 sum f sum f 2 sum f 即 f f 2 f 歸納下去可得 f f 2f 所以...