BZOJ2326 HNOI2011 數學作業

2021-07-27 14:29:26 字數 931 閱讀 1713

很容易得到遞推式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

using

namespace

std;

typedef

long

long ll;

ll read()

while(isdigit(ch))

return x*f;

}class matrixa,b,s;

ll n,tmp=1;

int mod,m;

ll qmul(ll x,ll y)

return rtn;

}matrix matrix_mul(matrix aa,matrix bb)

return rtn;

}void matrix_pow(ll num)

}int main()

matrix_pow(tmp*10-tmp);tmp*=10;

} printf("%lld\n",a.v[1][1]);

return

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 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...

bzoj 2326 HNOI2011 數學作業

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