http://acm.hdu.edu.cn/showproblem.php?pid=6470

题意

\(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n]

题解

  • 每一项只能由上一项经线性变换转移过来

代码

#include<bits/stdc++.h>
#define P 123456789
#define ll long long
using namespace std;
struct N{
ll a[10][10];
};
N mul(N x,N y){
N z;
memset(z.a,0,sizeof(z.a));
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
for(int k=0;k<6;k++){
z.a[i][j]+=(x.a[i][k]*y.a[k][j])%P;
z.a[i][j]%=P;
}
}
}
return z;
}
N pw(N y,ll x){
N z;memset(z.a,0,sizeof(z.a));
for(int i=0;i<6;i++)z.a[i][i]=1;
while(x){
if(x&1)z=mul(z,y);
y=mul(y,y);
x>>=1;
}
return z;
}
int T;
ll n,ans,a[]={2,1,8,4,2,1};
int b[][6]={{1,1,0,0,0,0},
{2,0,0,0,0,0},
{1,0,1,0,0,0},
{3,0,3,1,0,0},
{3,0,3,2,1,0},
{1,0,1,1,1,1}};
int main(){
cin>>T;
while(T--){
ans=0;
cin>>n;
if(n==1)printf("1\n");
else if(n==2)printf("2\n");
else{
N y;memset(y.a,0,sizeof(y.a));
y.a[0][0]=y.a[0][1]=1;
y.a[1][0]=2;
y.a[2][0]=y.a[2][2]=1;
y.a[3][0]=y.a[3][2]=3;y.a[3][3]=1;
y.a[4][0]=y.a[4][2]=3;y.a[4][3]=2;y.a[4][4]=1;
y.a[5][0]=y.a[5][2]=y.a[5][3]=y.a[5][4]=y.a[5][5]=1;
y=pw(y,n-2);
for(int i=0;i<6;i++){
ans+=a[i]*y.a[i][0]%P;
ans%=P;
}
printf("%lld\n",ans);
}
}
}

最新文章

  1. 增加SWAP空间的方法
  2. Ubuntu14.04下MySQL的安装
  3. Kali Linux渗透基础知识整理(一):信息搜集
  4. svn 提交失败 更新失败 提示 已经锁定
  5. Mysql 的函数
  6. 备忘&#183;添加SublimeText3右键菜单
  7. HTTP学习笔记2-请求结构
  8. input输入框只能输入数字的功能
  9. Delphi 10.1说明
  10. Highcharts中如何外部修改pointStart
  11. MySQL 经典面试题
  12. gitlab仓库迁移
  13. java.io.File类操作
  14. Hadoop记录- Yarn Job MAX
  15. C# 委托类型及使用
  16. fast ai环境配置
  17. 【读书笔记】iOS-网络-应用间通信
  18. delphi Form属性设置 设置可实现窗体无最大化,并且不能拖大拖小
  19. c++随机数及rand()的缺陷
  20. &lt;深入理解计算机系统&gt;第七章读书笔记

热门文章

  1. linux编程stat检测文件元数据信息
  2. 《Spring Cloud微服务 入门 实战与进阶》
  3. Qt Designer布局预览正常,代码调用时所有控件堆在一起
  4. php laravel请求处理管道(装饰者模式)
  5. php使用inotify扩展监控文件或目录,如果发生改变,就执行指定命令
  6. 【LOJ#2687】Vim(动态规划)
  7. Elastic:使用Heartbeat进行Uptime监控
  8. JQuery学习笔记(4)——ajax
  9. 【随笔】CLR:向头对象(Object Header)迈进一大步!!!
  10. Python读写Excel文件的实例