HDU 4291 A Short problem // 矩阵快速幂, 循环节
来源:互联网 发布:淘宝商城冰箱价格 编辑:程序博客网 时间:2024/05/21 14:49
题目描述
HDU 4291 A Short problem
解题思路
题目大意:
其中,
求
将递推关系变形为 :
然后用矩阵快速幂即可.
但是题目中有三重嵌套, 可能中间结果非常大, 导致效率低.既然涉及到取模操作,那么可能会存在循环节,我们可以先在本地找到这三个循环节.
typedef __int64 ll;ll getloop(ll mod){ ll g0 = 0, g1 = 1; ll a = g0, b = g1, c; for (ll i = 1;; ++i){ c = (3*b + a) % mod; if (b == g0 && c == g1) return i; a = b; b = c; }}
参考代码
#include<stdio.h>int mod, m[3] = {183120, 222222224, 1000000007};//取模的循环节typedef __int64 ll;struct Matrix { ll mat[2][2];};Matrix unit_matrix = { 1, 0, 0, 1};Matrix mul(Matrix a, Matrix b) { Matrix res; for(int i = 0; i < 2; i++) for(int j = 0; j < 2; j++) { res.mat[i][j] = 0; for(int k = 0; k < 2; k++) { res.mat[i][j] += a.mat[i][k] * b.mat[k][j]; res.mat[i][j] %= mod; } } return res;}Matrix pow_matrix(Matrix a, ll n) { Matrix res = unit_matrix; while(n) { if(n & 1) res = mul(res, a); a = mul(a, a); n >>= 1; } return res;}int main() { ll a, b, n; Matrix tmp, p; tmp.mat[0][0] = 3, tmp.mat[0][1] = 1; tmp.mat[1][0] = 1, tmp.mat[1][1] = 0; while(~scanf("%I64d", &n)) { for (int i = 0;i < 3;++i){ mod = m[i]; p = pow_matrix(tmp, n); n = p.mat[1][0]; } printf("%I64d\n",n); } return 0;}
0 0
- HDU 4291 A Short problem(矩阵快速幂+循环节)
- HDU 4291 A Short problem // 矩阵快速幂, 循环节
- HDU 4291-A Short problem-循环节+矩阵快速幂
- HDU 4291 A Short problem(矩阵快速幂取模求循环节)
- hdu 4291 A Short problem 矩阵快速幂,找循环节
- HDU 4291 A Short problem (2012成都网络赛,矩阵快速幂+循环节)
- HDU 4291 A Short problem(矩阵快速幂+循环节)
- HDU——4291A Short problem(矩阵快速幂+循环节)
- hdu 4291 A Short problem 矩阵+循环
- 【HDU】4291 A Short problem 矩阵快速幂
- hdu 4291 A Short problem 打表找规律&矩阵快速幂
- hdu 4291 A Short problem(矩阵快速幂)
- HDU-4291 A Short problem(矩阵快速幂)
- hdu 4291 A Short problem(矩阵快速幂)
- hdoj 4291 A Short problem 【找循环节 + 矩阵快速幂】
- Hdoj.4291 A Short problem【矩阵快速幂+循环节处理】 2015/12/09
- 【求循环节+矩阵快速幂】HDOJ A Short problem 4291
- hdu4291 A Short problem 矩阵快速幂 求循环节----成都网络赛
- Java中如何遍历Map对象的4种方法
- Consumable Media Types
- Otto介绍
- bisection bandwidth
- iPhone屏幕尺寸、分辨率及适配
- HDU 4291 A Short problem // 矩阵快速幂, 循环节
- 面试题:阿里 天猫积分换魔盒
- 多线程:线程状态、synchronized关键字、读写锁、条件对象、Volatile、阻塞队列等小结
- Take me to your heart-Michael Learns To Rock
- C#学习之Foreach
- intellij idea 必知的debug功能
- 安装有Maven的Eclipse启动时出现JDK警告
- 【Android性能优化】清除Android工程中没用到的资源
- 当ListView无数据显示时,默认显示空消息提示