小c數學成績優異,於是老師給小c留了一道非常難的數學作業題:給定正整數 n 和 m 要求計算 concatenate (1 ..n) mod m 的值,其中 concatenate (1 ..n)是將所有正整數 1, 2, …, n 順序連線起來得到的數。例如,n> = 13, concatenate (1 .. n)=12345678910111213.小c 想了大半天終於意識到這是一道不可能手算出來的題目, 於是他只好向你求助,希望你能編寫乙個程式幫他解決這個問題。蒟蒻百篇部落格紀念!
這道題看到這麼大,便不難想到要快速冪,之後再看到它的相乘時這麼有規律,便是矩乘。為什麼說有規律,因為f[i]=f[i-1]*10^k+i(f[i]表示concatenate (1 .. i),k表示i的位數),這個式子如此單一,便可以加速。但是10^k這個在各個位數上不一樣啊,那就分各個位數來做啦,之後就非常容易了。
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...