bzoj 2326 HNOI2011 數學作業

2021-06-26 18:00:53 字數 584 閱讀 1642

題目大意:給你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~99 100~145,這樣對於每一類都有 f[i]=f[i-1]*10^bit+i ,就可以用矩陣乘法加速了 

#include#include#include#includeusing namespace std;

typedef long long ll;

ll n;int mod;

void init()

struct tmatrix

};tmatrix mul(tmatrix &a,tmatrix &b)

void power(tmatrix &res,ll x)

ll ans=0;

void solve(int bit,ll st,ll ed)

void work()

int main()

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

bzoj 2326 HNOI2011 數學作業

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