距陣的運用

2022-08-26 06:57:10 字數 1324 閱讀 6507

昨晚大四的乙個學長給我們講了,距陣的使用,很不錯,這裡總結一下。

一般距陣,用在n很大,導致超時的問題上。它需要快速冪取模的輔助。

例子求斐波那契數列   a1=1;    a2=1;     an=an-1+an-2;   求 an     (n>=1&&n<=108)    由於n很大結果對999999999取模;

對於這題n很大你直接推,每次取%999999999,明顯會超時,

矩陣做法

這樣就可以化為 矩陣(a1 a2)*矩陣(an-1)= 矩陣(an,an+1);

看**#include

#include

#define mod 999999999

__int64 a[5];

__int64 b[3][3];

__int64 quick_mod(__int64 n)

n=n/2;

__int64 k1,k2,k3,k4;

k1=(b[1][1]*b[1][1]%mod+b[1][2]*b[2][1]%mod)%mod;

k2=(b[1][1]*b[2][1]%mod+b[1][2]*b[2][2]%mod)%mod;

k3=(b[2][1]*b[1][1]%mod+b[2][2]*b[2][1]%mod)%mod;

k4=(b[2][1]*b[1][2]%mod+b[2][2]*b[2][2]%mod)%mod;

b[1][1]=k1; b[1][2]=k2; b[2][1]=k3; b[2][2]=k4;

}return a[1];

}int main(void)

return 0;

}這樣就運用快速冪取模大大減少了時間。

如果矩陣大一點的話這樣寫

#include

#include

#define mod 999999999

__int64 a[5];

__int64 b[3][3];

__int64 quick_mod(__int64 n)

}for(i=1;i<=2;i++)

a[i]=s[i];

n--;

}n=n/2;

__int64 kk[5][5];

memset(kk,0,sizeof(kk));

for(i=1;i<=2;i++)}}

for(i=1;i<=2;i++)}}

return a[1];

}int main(void)

return 0;

}

P1939 矩陣加速(距陣快速冪)

思路 這個資料範圍,想要硬算是不可能的。所以我們需要用距陣快速冪去加速這個遞推。我們可以構造乙個距陣 然後我們發現,f i f i 1 1 f i 2 0 f i 3 1 f i 1 f i 1 1 f i 2 1 f i 3 0 f i 2 f i 1 0 f i 2 1 f i 3 0 這樣我們...

方法的運用 強效方法的實際運用

瑪爾西 席莫芙 真正過著這種神奇生活的人,與不是如此生活的人,差別只在 真正過著神奇生活的人已經習慣這種存在的方式,他們已經習慣運用吸引力法則,不論走到哪兒,奇蹟都會發生在他們身上,因為他們記得要使用它。他們一直在使用它,而不是只做一次就算了。這裡有兩個真實的故事,把強有力的吸引力法則及宇宙完美無瑕...

快取的運用

根據人物屬性得到資料列表 幾條資料 型別 條件 是否使用快取 過期時間 分鐘 public datatable getattrtop int top,string attr,string where,bool iscache,int outtime return datatable obj else...