bzoj2326 HNOI2011 數學作業

2021-07-10 11:49:18 字數 582 閱讀 3893

一開始一直不理解矩陣乘法是什麼東西。。。現在有一點自己的想法。

對於如f(i+1)=a*f(i)+b,可以構造乙個矩陣b,使矩陣a[i]*矩陣b=矩陣a[i+1]。然後利用矩陣快速冪加速。

這道題對於不同的位數有不同的遞推式。設位數為k,f[i+1]=10^k*f[i]+i+1,可構造3*3的矩陣:10^k,1,1  0,1,1  0,0,1(好像不太對。。。)。

#include#include#define ll long long

using namespace std;

ll n,mo,m,a[3][3],b[3][3],k[100];

void mul(ll a[3][3],ll b[3][3],ll ans[3][3])

for(ll i=0;i<3;i++)

for(ll j=0;j<3;j++)

ans[i][j]=tmp[i][j];

}void ksm(ll a[3][3],ll b[3][3],ll t)

int main()

printf("%lld\n",a[0][0]);

}

bzoj 2326 HNOI2011 數學作業

題目大意 給你n,m,求concatenate 1.n mod m的值 concatenate 1.n 代表把1到n連起來 比如n 13時 concatenate 1.n 就是12345678910111213 n 10 1 m 10 9 這題很水,對於n,將其分開,比如145,就分成1 9,10 ...

BZOJ2326 HNOI2011 數學作業

很容易得到遞推式f i f i 1 10k i 10k 1 i 10k 資料範圍達到 1018 所以很容易想到用矩陣優化。構造矩陣 f i i 1 10k 1101 1001 然後分段開開心心的分段矩乘啦。注意邊界。include include include define n 10005 usi...

bzoj 2326 HNOI2011 數學作業

小c數學成績優異,於是老師給小c留了一道非常難的數學作業題 給定正整數 n 和 m 要求計算 concatenate 1 n mod m 的值,其中 concatenate 1 n 是將所有正整數 1,2,n 順序連線起來得到的數。例如,n 13,concatenate 1 n 1234567891...