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

题意:求解递推式f(n)=f(n-1)+2*f(n-2)+n^4。

写了个小东西,不过我的文章里式子是2*f(n-1),内容差不多。凑合看

 #include <bits/stdc++.h>
using namespace std; typedef long long LL;
const LL mod = ;
const int maxn = ;
LL n, a, b; typedef struct Matrix {
LL m[maxn][maxn];
int r;
int c;
Matrix() {
r = c = ;
memset(m, , sizeof(m));
}
} Matrix; Matrix mul(Matrix m1, Matrix m2) {
Matrix ans = Matrix();
ans.r = m1.r;
ans.c = m2.c;
for(int i = ; i <= m1.r; i++) {
for(int j = ; j <= m2.r; j++) {
for(int k = ; k <= m2.c; k++) {
if(m2.m[j][k] == ) continue;
ans.m[i][k] = ((ans.m[i][k] + m1.m[i][j] * m2.m[j][k] % mod) % mod) % mod;
}
}
}
return ans;
} Matrix quickmul(Matrix m, LL n) {
Matrix ans = Matrix();
for(int i = ; i <= m.r; i++) {
ans.m[i][i] = ;
}
ans.r = m.r;
ans.c = m.c;
while(n) {
if(n & ) {
ans = mul(m, ans);
}
m = mul(m, m);
n >>= ;
}
return ans;
} int main() {
// freopen("in", "r", stdin);
int T;
scanf("%d", &T);
while(T--) {
scanf("%I64d%I64d%I64d",&n,&a,&b);
if(n == ) {
printf("%I64d\n", a);
continue;
}
if(n == ) {
printf("%I64d\n", b);
continue;
} Matrix x; x.r = , x.c = ;
Matrix y; y.r = , y.c = ;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=;
x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=,x.m[][]=; y.m[][]=b,y.m[][]=a,y.m[][]=,y.m[][]=,y.m[][]=,y.m[][]=,y.m[][]=;
Matrix p = quickmul(x,n-);
Matrix ret = mul(p,y);
printf("%I64d\n", ret.m[][]);
// cout << ret.r << " " << ret.c << endl;
}
return ;
}

最新文章

  1. C++/MFC如何启动另一个应用程序并获取其进程 ID
  2. datagrid中load,reload,loadData方法的区别
  3. jetty ZipException: invalid entry size
  4. React:用于搭建UI的JavaScript库
  5. python 开发简单的聊天工具
  6. dedecms 文章内容文章名字和文章网址的调用
  7. tftp使用方法
  8. Android开发环境配置(win7_64bit)
  9. echarts_部分图表配置_dataZoom精确控制显示数据数量
  10. Python(一)字符串用法
  11. 以独立的语句将new对象置入智能指针
  12. win10装ubuntu双系统
  13. jq slideToggle()坑
  14. HTML(三)HTML属性
  15. 使用 pm2 优雅的部署 node 程序
  16. 网络测试工具 - QCheck
  17. 谈谈canvas的性能优化(主要讲缓存问题)
  18. [EXP]Drupal &lt; 8.6.10 / &lt; 8.5.11 - REST Module Remote Code Execution
  19. 使用Bootstrap Popover实现一个弹框上三角形的代码记录
  20. 如何快速成为一名Linux运维工程师

热门文章

  1. SqlServer:此数据库处于单用户模式,导致数据库无法删除的处理
  2. Sql server analysis service 通过IIS连接时的最大连接数问题
  3. 全半角空格导致的Sql Server Analysis Services处理错误(转载)
  4. Objective-C语言的面向对象特性
  5. Servlet乱码
  6. jQuery - AJAX get() 和 post() 方法
  7. 【转】介绍设置Session失效的几种方法
  8. java 用socket制作一个简易多人聊天室
  9. C# 添加.DLL 出错的解决方法
  10. GOICE项目初探