没错就是这道模板题我做了一个小时...我居然在看第一眼就认为是快速幂的情况下强行找了一发瞬时求出的规律

每个阶段有黑白两种 a[i].black=a[i-1].black*3+a[i].white      a[i].white=a[i-1].black+a[i-1].white*3

求每个阶段的black

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
#define mod 1000000007
long long int a[2];
long long int b[2][2];
void init()
{
a[0]=1;
a[1]=0;
b[0][0]=3;
b[0][1]=1;
b[1][0]=1;
b[1][1]=3;
}
void cheng()
{
long long q=((a[0]*b[0][0])%mod+(a[1]*b[1][0])%mod)%mod;
long long w=((a[0]*b[0][1])%mod+(a[1]*b[1][1])%mod)%mod;
a[0]=q;
a[1]=w;
return ;
}
void ch()
{
long long int z[2][2];
for(int i=0;i<2;i++)
{
for(int k=0;k<2;k++)
{
z[i][k]=0;
for(int j=0;j<2;j++)
{
z[i][k]+=(b[i][j]*b[j][k])%mod;
}
z[i][k]%=mod;
}
}
for(int i=0;i<2;i++)
for(int k=0;k<2;k++)
{
b[i][k]=z[i][k];
}
return ;
}
void cal(long long int n)
{
if(n==0)
return ;
if(n%2==0)
{
n/=2;
ch();
cal(n);
}
else if(n%2!=0)
{
n--;
cheng();
cal(n);
}
}
long long n;
int main(){
while(~scanf("%lld",&n))
{
init();
cal(n);
printf("%lld\n",a[0]);
}
}

最新文章

  1. Thailand vs Soros
  2. Linux三剑客之grep 与 egrep
  3. Atitit 视图状态ViewState)的原理与管理
  4. Java基础复习笔记系列 三
  5. sharepoint:找不到位于 http://XX.XX.XX.XX 的 Web
  6. HDU 1671 Phone List(Trie的应用与内存释放)
  7. 自然对数e
  8. https://github.com/aptana/studio3/releases aptana
  9. java线程的等待、通知机制【读书笔记】
  10. commons-logging的使用
  11. Django之自带的认证系统 auth模块
  12. 未知高度的div自适应图片高度
  13. PowerScript语句
  14. java构造函数总结
  15. 使用pywin32处理excel文件
  16. Android studio修改字体(font)大小(size)
  17. mac shell终端编辑命令行快捷键
  18. 初次使用http打不开页面,使用https打开过后使用http协议又能正常访问
  19. Maven的安装学习笔记
  20. Hibernate 中 load() 方法导致的 noSession 异常

热门文章

  1. python基础——递归函数
  2. Android开发之onClick事件的三种写法
  3. 原始套接字(SOCK_RAW)
  4. Shell脚本入门与应用
  5. 《Effective Java》笔记 使类和成员的可访问性最小化
  6. Sql server之路 (六)上传服务器图片
  7. PHP项目:如何用PHP高并发检索数据库?
  8. SAE上传web应用(包括使用数据库)教程详解及问题解惑
  9. Menu菜单
  10. php 批量生成html、txt文件