题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291

思路:首先保留求出循环节,然后就是矩阵求幂了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef __int64 ll;
#define MOD2 1000000007
#define MOD1 222222224
#define MOD0 183120 /*
暴力求循环节
int main()
{
ll f0=0,f1=1;
for(ll i=1; ;i++){
ll tmp=(3*f1+f0)%MOD1;
f0=f1;
f1=tmp;
if(f0==0&&f1==1){
printf("%I64d\n",i);
break;
}
}
return 0;
}*/ ll n; struct Matrix{
ll map[][];
}Mata,Matb; Matrix Mul(const Matrix &a,const Matrix &b,ll MOD)
{
Matrix c;
for(int i=;i<;i++){
for(int j=;j<;j++){
c.map[i][j]=;
for(int k=;k<;k++){
c.map[i][j]+=a.map[i][k]*b.map[k][j];
if(c.map[i][j]>=MOD)c.map[i][j]%=MOD;
}
}
}
return c;
} ll Pow(Matrix p,ll n,ll MOD)
{
Matrix q;
for(int i=;i<;i++)
for(int j=;j<;j++)
q.map[i][j]=(i==j?:);
while(n){
if(n&){
q=Mul(p,q,MOD);
}
n>>=;
p=Mul(p,p,MOD);
}
return q.map[][];
} int main()
{
while(~scanf("%I64d",&n)){
if(n==){
puts("");
}else if(n==){
puts("");
}else {
Mata.map[][]=;
Mata.map[][]=;
Mata.map[][]=;
Mata.map[][]=;
ll tmp1=Pow(Mata,n,MOD0);
ll tmp2=Pow(Mata,tmp1,MOD1);
ll tmp3=Pow(Mata,tmp2,MOD2);
printf("%I64d\n",tmp3);
}
}
return ;
}

hdu 4291(矩阵+暴力求循环节)的更多相关文章

  1. HDU 1358 Period (kmp求循环节)(经典)

    <题目链接> 题目大意: 意思是,从第1个字母到第2字母组成的字符串可由某一周期性的字串(“a”) 的两次组成,也就是aa有两个a组成: 第三行自然就是aabaab可有两个aab组成: 第 ...

  2. HDU 3746 Cyclic Nacklace (KMP求循环节问题)

    <题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题]  #include &l ...

  3. hdu 4291 矩阵幂 循环节

    http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109  ...

  4. Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推

    题目链接: Hdu  5451  Best Solver 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 解题思路: x的取值为[1, 232],看到这个指数,我的心情是异常崩 ...

  5. HDU - 5451 Best Solver(循环节+矩阵快速幂)

    Best Solver The so-called best problem solver can easily solve this problem, with his/her childhood ...

  6. HDU - 3374 String Problem (kmp求循环节+最大最小表示法)

    做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. ...

  7. HDU - 6444 Neko's loop(循环节+最大子段和)

    http://acm.hdu.edu.cn/showproblem.php?pid=6444 题意 一个有n个数的环,每次循环走k步,走到每个点都有具体的权值,问在任意点出发最多走m步的情况下,一开始 ...

  8. Java求循环节长度

    两个整数做除法,有时会产生循环小数,其循环部分称为:循环节.比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位.下面的方法,可以求出循环节的长 ...

  9. Uva 12012 Detection of Extraterrestrial 求循环节个数为1-n的最长子串长度 KMP

    题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=3163">点击打开链接 题意: ...

随机推荐

  1. 05-maven学习-构建web项目

    1,新增maven项目 然后输入相应包名,项目名,创建如下项目 发现以上有报错,需要进行如下操作: 下面文章转载自:http://blog.csdn.net/zhshulin/article/deta ...

  2. 转:sock_ev——linux平台socket事件框架(socket代理类) .

    前面分析了对socket基本操作的封装,并按照数据的传送方式写了两个类,本篇将写一个代理类提供给库的使用者使用的类. /**************************************** ...

  3. 【图像算法】彩色图像切割专题八:基于MeanShift的彩色切割

    >原理曾经的博客中已经有对meanshift原理的解释,这里就不啰嗦了.国外的资料看这:http://people.csail.mit.edu/sparis/#cvpr07 >源代码 核心 ...

  4. Swift2.0-异常处理(Exception handler)

    Swift2.0-异常处理(Exception handler) 前言 关于我们为什么要使用异常处理,请看百度百科为我们作出的描述,想要更详细的资料请点这里 异常处理,英文名为exceptional ...

  5. PHP-"php://(类型)"访问各个输入/输出流以及全局变量$HTTP_RAW_POST_DATA讲解

    $_POST $HTTP_RAW_POST_DATA php://input 先来讲以上三者的区别: $_POST:以关联数组方式组织提交的数据, 并对原数据进行编码处理(urldecode)和编码转 ...

  6. 【LeetCode】73. Set Matrix Zeroes (2 solutions)

    Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do i ...

  7. centos增加软连接

    #增加软连接 ln -s /usr/local/git/bin/* /usr/bin/

  8. FFmpeg 向视频中添加文字

    原文地址:http://www.cnblogs.com/wanggang123/p/6707985.html FFmpeg支持添加文字功能,具体如何将文字叠加到视频中的每一张图片,FFmpeg调用了文 ...

  9. ImageButton动态改变按钮图片

      在drawable 目录下增加一个myselector.xml文件,appwidget_play.png,appwidget_played.png myselector.xml文件中内容如下 &l ...

  10. HDU 5186 zhx&#39;s submissions (进制转换)

    Problem Description As one of the most powerful brushes, zhx submits a lot of code on many oj and mo ...