【HNOI2011】数学作业(BZOJ 2326)
生活随笔
收集整理的這篇文章主要介紹了
【HNOI2011】数学作业(BZOJ 2326)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=2326 ? 設(shè)f[i]表示i的答案,那么 f[i] = f[i - 1] * 10 + i ? ? ?(i < 10) f[i] = f[i - 1] * 100 + i ? ?( ?100<=i<=999) …… ? 我們發(fā)現(xiàn)N的范圍很大所以要用矩陣加速遞推: 然后也需要分段改變遞推矩陣的系數(shù)。 ?
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MID(x,y) ((x+y)>>1)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;typedef long long LL;LL n, m;
const int MAX = 5;
struct Mat{int row, col;LL mat[MAX][MAX];
};
//initialize square matrix to unit matrix
Mat unit(int n){Mat A;A.row = A.col = n;memset(A.mat, 0, sizeof(A.mat));for (int i = 0; i < n; i ++)A.mat[i][i] = 1;return A;
}
//return A*B%mod
Mat mul(Mat A, Mat B, int mod){Mat C;C.row = A.row;C.col = B.col;for (int i = 0; i < A.row; i ++){for (int j = 0; j < B.col; j ++){C.mat[i][j] = 0;for (int k = 0; k < A.col; k ++)//注意這里要保證乘法不溢出,否則還需要設(shè)計(jì)特殊的乘法模C.mat[i][j] += A.mat[i][k] * B.mat[k][j];C.mat[i][j] %= mod;}}return C;
};
//return A^n%mod
Mat exp_mod(Mat A, LL n, int mod){Mat res = unit(A.row);while(n){if (n & 1LL){res = mul(res, A, mod);}A = mul(A, A, mod);n >>= 1;}return res;
}
Mat A, res;void changeA(LL p){A.col = A.row = 3;A.mat[0][0] = p % m; A.mat[0][1] = 1; A.mat[0][2] = 0;A.mat[1][0] = 0; A.mat[1][1] = 1; A.mat[1][2] = 1;A.mat[2][0] = 0; A.mat[2][1] = 0; A.mat[2][2] = 1;
}void init(){res.col = 1;res.row = 3;res.mat[0][0] = 0;res.mat[1][0] = 1;res.mat[2][0] = 1;changeA(10);
}int main(){cin >> n >> m;init();LL k1 = 0;LL k2 = 9;LL ct = 10;while(n >= k2){res = mul(exp_mod(A, k2-k1, m), res, m);k1 = k2;if (k2 == 99999999999999999)k2 = 100000000000000001;k2 = k2 * 10 + 9;changeA(10*ct);ct *= 10;}if (n > k1)res = mul(exp_mod(A, n-k1, m), res, m);cout << res.mat[0][0] << endl;return 0;
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/AbandonZHANG/archive/2013/04/02/4114231.html
總結(jié)
以上是生活随笔為你收集整理的【HNOI2011】数学作业(BZOJ 2326)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ApplicationListener,
- 下一篇: chrome浏览器插件开发