HDU4291—A Short problem
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291
题目意思:求g(g(g(n))) mod 109 + 7,其中g(n) = 3g(n - 1) + g(n - 2),g(1) = 1,g(0) = 0。
思路:一个很简单的矩阵快速幂,简单的想法就是先用n算出g(n),然后再算g(g(n)),然后再算最外层,都是mod(1e9+7),这么做就错了,这道题有一个循环节的问题,看来这种嵌套的递推式取mod是存在循环节的,以后要注意下。
计算循环节的代码(貌似方法叫做弗洛伊德判圈法?):
#include <cstdio>
#include <iostream>
using namespace std;
#define LL __int64
LL mod=1e9+;
int main()
{
LL i,a,b,g;
a=,b=;
for(i=;;i++)
{
g=(*a+b)%mod;
b=a;
a=g;
if(a==&&b==)
{
if(i!=mod) {mod=i;}
else break;
cout<<i<<endl;
i=;
}
}
return ;
}
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef __int64 int64;
const int N = ; int64 n;
struct Matrix{
int64 mat[N][N];
int64 MOD;
Matrix operator*(const Matrix& m)const{
Matrix tmp;
tmp.MOD = MOD;
for(int i = ; i < N ; i++){
for(int j = ; j < N ; j++){
tmp.mat[i][j] = ;
for(int k = ; k < N ; k++)
tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;
tmp.mat[i][j] %= MOD;
}
}
return tmp;
}
}; int64 Pow(Matrix m , int64 x , int64 MOD){
if(x <= ) return x;
Matrix ans;
ans.MOD = m.MOD = MOD;
ans.mat[][] = ans.mat[][] = ;
ans.mat[][] = ans.mat[][] = ;
x--;
while(x){
if(x%)
ans = ans*m;
x /= ;
m = m*m;
}
return ans.mat[][]%MOD;
} // 暴力找到循环节
int64 getLoop(int64 MOD){
int64 pre1 = ;
int64 pre2 = ;
for(int64 i = ; ; i++){
int64 x = *pre1%MOD+pre2%MOD;
x %= MOD;
// update
pre2 = pre1;
pre1 = x;
int64 y = *pre1%MOD+pre2%MOD;
if(x == && y == ){
return i;
}
}
} int main(){
int64 L1 = 1e9+;
int64 L2 = ;
int64 L3 = ;
Matrix m;
m.mat[][] = ; m.mat[][] = ;
m.mat[][] = ; m.mat[][] = ;
while(scanf("%I64d" , &n) != EOF){
int64 x = Pow(m , n , L3);
int64 y = Pow(m , x , L2);
int64 ans = Pow(m , y , L1);
printf("%I64d\n" , ans);
}
return ;
}
HDU4291—A Short problem的更多相关文章
- HDU----(4291)A Short problem(快速矩阵幂)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu4291 A Short problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- hdu 4291 A Short problem(矩阵+取模循环节)
A Short problem Time Limit: 2000/1000 MS (J ...
- HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)
HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online) 题目链接http://acm.hdu.edu.cn/showp ...
- HDU 4291 A Short problem(矩阵+循环节)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- FZU2013 A short problem —— 线段树/树状数组 + 前缀和
题目链接:https://vjudge.net/problem/FZU-2013 Problem 2013 A short problem Accept: 356 Submit: 1083Ti ...
- HDU——4291A Short problem(矩阵快速幂+循环节)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 贪心 FZU 2013 A short problem
题目传送门 /* 题意:取长度不小于m的序列使得和最大 贪心:先来一个前缀和,只要长度不小于m,从m开始,更新起点k最小值和ans最大值 */ #include <cstdio> #inc ...
- 循环节 + 矩阵快速幂 - HDU 4291 A Short problem
A Short problem Problem's Link Mean: 给定一个n,求:g(g(g(n))) % 1000000007 其中:g(n) = 3g(n - 1) + g(n - 2), ...
随机推荐
- **alon_MM DMA Interface for PCIe使用详解
在所从事的项目中需要用到PCIE和DMA,经过再三研究,反复查看相关资料,终于弄懂了**alon_MM DMA Interface for PCIe的使用方法. PCIE在fpga和上位机之间起着中间 ...
- 如何使用微信JS-SDK实际分享功能
http://jingyan.baidu.com/album/d3b74d64c517051f77e609ed.html?picindex=7
- line: 1: Syntax error: word unexpected (expecting ")")
开发板上运行可执行程序报出错误: line1: 1: Syntax error: word unexpected (expecting ")") 解决思路: 1.编译器的问题 用a ...
- gpio 灯的对应关系
1 点灯验证通过: GPIO160 TX1-LED GPIO161 RX1-LED GPIO163 TX2-LED GPIO164 RX2-LED GPIO ...
- 编译Spark2.1.2源码
源码编译的shell脚本为 /dev/make-distribution.sh ,下载源码包解压就能找到.不同版本使用的参数有差异.可以直接查看make-distribution.sh文件. 下载sp ...
- ZooKeepr日志清理(转)
转载请用注明:@ni掌柜 nileader@gmail.com 在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默 ...
- 007Maven_在Myeclipse创建web项目
创建Web项目 l 选择创建一个普通的web工程
- Unity3d优化总结1
优化内容 包括: 1.代码方面: 2.函数使用方面: 3.ngui注意方面: 4.数学运算方面: 5.内存方面: 6.垃圾回收方面 等等... 1. 尽量避免每帧处理,可以每隔几帧处理一次 比如: ...
- python爬虫<urlopen error [Errno 10061] >
在网上看了十几篇文章,都是说的是IE的代理设置,具体是: Tools->Internet Options->Connections->Lan Settings 将代理服务器的小勾勾去 ...
- 清除信号量队列导致zabbix自动关闭
前几天在海外UCloud机器上部署了一套zabbix proxy和zabbix agentd,可是第二天一大早就收到邮件说zabbix_proxy挂掉了,上去查一下发现两台机器中的一台的proxy和a ...