[BZOJ2326][HNOI2011]数学作业(矩乘)
来源:互联网 发布:汕头峡山淘宝拍摄 编辑:程序博客网 时间:2024/06/14 15:38
考虑求
可以得到,
则有:
建立一个
此时可以得出,
用这样的方法,就可以求出
代码:
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll nn, E10[1005]; int CYX, Exp[1005], np[25];struct cyx { int m, n, a[15][15]; cyx() {} cyx(int _m, int _n) : m(_m), n(_n) {memset(a, 0, sizeof(a));} friend inline cyx operator * (cyx x, cyx y) { cyx z = cyx(x.m, y.n); int i, j, k; for (i = 1; i <= z.m; i++) for (j = 1; j <= z.n; j++) for (k = 1; k <= x.n; k++) (z.a[i][j] += 1ll * x.a[i][k] * y.a[k][j] % CYX) %= CYX; return z; } friend inline cyx operator ^ (cyx x, ll y) { cyx aa = x, z = cyx(x.m, x.n); int i; for (i = 1; i <= z.m; i++) z.a[i][i] = 1; while (y) { if (y & 1) z = z * aa; aa = aa * aa; y >>= 1; } return z; }} F, P;int qpow(int a, ll b) { int res = 1; while (b) { if (b & 1) res = 1ll * res * a % CYX; a = 1ll * a * a % CYX; b >>= 1; } return res;}int solve(int w, ll mx) { F.a[1][1] = F.a[2][1] = Exp[w - 1]; F.a[3][1] = 1; P.a[1][1] = Exp[w]; F = (P ^ mx - E10[w - 1]) * F; return F.a[1][1];}inline int read() { int res = 0; bool bo = 0; char c; while (((c = getchar()) < '0' || c > '9') && c != '-'); if (c == '-') bo = 1; else res = c - 48; while ((c = getchar()) >= '0' && c <= '9') res = (res << 3) + (res << 1) + (c - 48); return bo ? ~res + 1 : res;}int main() { int i, cnt = 0, res = 0; cin >> nn; CYX = read(); Exp[0] = E10[0] = 1; for (i = 1; i <= 1000; i++) Exp[i] = 1ll * Exp[i - 1] * 10 % CYX; for (i = 1; i <= 18; i++) E10[i] = E10[i - 1] * 10; F = cyx(3, 1); P = cyx(3, 3); P.a[1][2] = P.a[1][3] = P.a[2][2] = P.a[2][3] = P.a[3][3] = 1; ll bb = nn; while (bb) cnt++, bb /= 10; for (i = 1; i <= cnt; i++) { ll mx = i == cnt ? nn : E10[i] - 1; res = 1ll * res * qpow(qpow(10, mx - E10[i - 1] + 1), i) % CYX; (res += solve(i, mx)) %= CYX; } printf("%d\n", res); return 0;}
阅读全文
0 0
- [BZOJ2326][HNOI2011]数学作业(矩乘)
- BZOJ2326 [HNOI2011]数学作业
- 【bzoj2326】【HNOI2011】【数学作业】
- HNOI2011 BZOJ2326 数学作业
- [BZOJ2326][HNOI2011]数学作业
- 【HNOI2011】【BZOJ2326】数学作业
- bzoj2326: [HNOI2011]数学作业
- 【BZOJ2326】【HNOI2011】数学作业
- bzoj2326【HNOI2011】数学作业
- BZOJ2326: [HNOI2011]数学作业
- bzoj2326 [HNOI2011]数学作业
- 【bzoj2326】[HNOI2011]数学作业
- Bzoj2326:HNOI2011-数学作业
- bzoj2326 [HNOI2011]数学作业
- bzoj2326 [HNOI2011]数学作业
- [题解]bzoj2326(HNOI2011)数学作业
- [BZOJ2326][HNOI2011]数学作业 && 分段矩阵
- 【矩阵加速】[BZOJ2326][HNOI2011]数学作业
- 洛谷 P1522 牛的旅行 Cow Tours(Floyd, 并查集)
- js快速排序
- ATP的开学第一个月
- [poj2524]Ubiquitous Religions
- Rxjava2.x很详细的介绍
- [BZOJ2326][HNOI2011]数学作业(矩乘)
- js归并排序
- POJ 2051 Argus
- 从零开始写Python爬虫 --- 1.1 requests库的安装与使用
- Bootstrap初步了解 起步 基本模板
- [LintCode]175.翻转二叉树
- js封装cookie函数
- 通过行为参数传递代码
- 常用正则表达式