不定維數矩陣構造 hdu3509

2021-08-07 21:35:46 字數 1338 閱讀 2107

題意:

資料範圍:

each test case contains 7 integers, they are f1, f2, a, b, k, n, m which were just mentioned above, where 0 < f1, f2, a, b, n, m < 1000 000 000, and 0 ≤ k < 50.

題解:對於這種k次方,而且累加求和的一般都是矩陣快速冪,只要是構造矩陣比較麻煩。

看乙個大神的題解(侵刪):

本題要二項式展開,別怕麻煩。

方法和以前的矩陣推法一樣,就是矩陣是變化的,根據資料而變化。

先自己寫下,感覺紙寫不下時,就別寫了!

設k=3;自己展開算一下:

右邊的展開: 就是用f(n)=af(n-1)+bf(n-2)  把f(n)都換成 f(n-1)f(n-2)的表示式,最後根據表示式把上面左邊的矩陣求出。驚奇的發現很有規律,是個下三角矩陣,和k有直接的關係。

是k+2的方陣。設該方陣為a,則 (a*f). a11=s(2);所以只要計算 n-1次,就能算出s(n)了。

注意:s(1)不等於f1,  s(1)=f1^k,我在這裡wa 了20次,低階錯誤!

所以當k>3時,矩陣也推出來了。

就是二項式的展開作為係數的下三角矩陣。

如何解決矩陣的大小不固定問題:

想了很多,想用類,或用指標,走了彎路!

突然想到,初始化開1個很大的2維陣列,然後每次矩陣乘法時根據每組資料的矩陣的維數來計算就行了,實際執行時正確的,測試很多回了,基本沒改動模板,看**就懂了。

#include #include #include #define ll long long

using namespace std;

const int maxn=50;

ll mod,k,k;

struct mat

res,a;

ll c[maxn+10][maxn+10];

ll line[maxn+10];

void get_c()

}ll _pow(ll x,ll y)

return ans;

}mat mul(mat a,mat b)

ll ans=0;

for(ll i=0; i

C 數獨遊戲(一) 構造數獨矩陣

其實一直都很想寫個數獨的遊戲,最近剛好看了 程式設計之美 得到了一些啟發。好,這時第一節,構造數獨矩陣。主要用到深度搜尋演算法,先往下乙個格仔填數字 依次填入1 9 在9 9 的行中檢驗數字有沒有出現過,在9 9 的列中檢驗數字有沒有出現過,最後在3 3的 中檢驗數字是否出現過。如果最後1 9中所有...

二維陣列隨機數列印矩陣

矩陣為 5 行 5 列,該矩陣是由程式隨機產生的 10 以內數字排列而成。下面使用二維陣列來建立該矩陣 public static void test2 普通for迴圈遍歷二維陣列 system.out.println 普通for迴圈遍歷二維陣列 for int i 0 i shuzu.length...

c 矩陣出現奇怪的數 用矩陣來處理資料 降維打擊

同四維跌落到三維一樣,三維空間也會向二維空間跌落,由乙個維度蜷縮到微觀中。那一小片二維空間的面積 它只有面積 會迅速擴大,這又引發了更大規模的跌落 我們現在就處在向二維跌落的空間中,最終,整個太陽系將跌落到二維,也就是說,太陽系將變成一副厚度為零的畫。維度上面引用了三體的一段話,想 一下維度的事情。...