BZOJ2326 數學作業

2021-08-14 11:23:30 字數 664 閱讀 7787

題目傳送門

設n的答案為f(n)。那麼很容易得到乙個遞推式:f(

n)=f

(n−1

)∗10k

+n,其中k是n的位數。

所以當k固定時,這個式子的轉移方式也是固定的。所以可以列舉每個k。而對於每乙個k,我們很容易得到乙個矩陣: [10

k,1,

1] [

0,,,

,1,1

] [0

,,,,

1,1]

對每乙個k,就可以快速計算答案。

code

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

ll mo;

ll f[10][10],c[10][10],ans[10][10];

void calc1()

void calc2()

void ksm(ll t,ll last)

}int main()

ksm(t,n);

printf("%lld\n",ans[1][3]);

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

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