hdu1757(矩阵加速)
2015-08-06 20:22
239 查看
数据量为10^9,直接矩阵加速搞起
#include <cstring> #include <cstdio> const int N = 10; int MOD; int n; struct mat { int a[N + 10][N + 10]; }; mat mul(mat x, mat y) { mat t; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { t.a[i][j] = 0; for(int k = 0; k < N; k++) { t.a[i][j] += (x.a[i][k] * y.a[k][j]) % MOD; } t.a[i][j] %= MOD; } } return t; } mat pow(mat x, int b) { mat e; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { e.a[i][j] = 0; } } for(int i = 0; i < N; i++) { e.a[i][i] = 1; } while(b) { if(b & 1) { e = mul(e, x); } x = mul(x, x); b >>= 1; } return e; } int main(int argc, char const *argv[]) { mat x; while(~scanf("%d%d", &n, &MOD)) { memset(x.a, 0, sizeof(x.a)); for(int i = 0; i < N; i++) { scanf("%d", &x.a[0][i]); } if(n < 10) { printf("%d", n % MOD); continue; } for(int i = 1; i < N; i++) { x.a[i][i - 1] = 1; } x = pow(x, n - 9); int ans = 0; for(int i = 0; i < N; i++) { ans += ((9 - i) * x.a[0][i]) % MOD; } printf("%d\n", ans % MOD); } return 0; }
相关文章推荐
- Python本地化例子 - gettext 模块
- DedeAMPZ 网吧能安装却不能打开网站
- Bin Packing
- scala 入门2
- MongoDB基本命令使用
- JavaScript基础----11Javascript函数-了解函数的用途
- Ganymed SSH-2 java执行远程linux机器命令工具
- Vmware Workstation 安装linux (CentOs)系统
- Hibernate学习笔记(二) — 探索 hibernate 中对象的状态
- dancing links 算法 解 Sudoku
- HDU - 5093 Battle ships 初学 二分图匹配
- 最大二分图hdu5091
- LeetCode(114) Flatten Binary Tree to Linked List
- JS学习第四天----可选的分号
- 10进制转化成其他进制
- 黑马程序员——java开发环境配置
- 虚拟机的安装和使用
- 驱动中以文件句柄形式调用其他驱动程序(同步调用)
- BizTalk Orchestration execute Flat file disassembler ReceivePipeline
- 贪心+优先队列 HDOJ 5360 Hiking