HDU 5950 Recursive sequence(矩阵快速幂)题解
2024-10-20 05:33:10
思路:一开始不会n^4的推导,原来是要找n和n-1的关系,这道题的MOD是long long 的,矩阵具体如下所示
最近自己总是很坑啊,代码都瞎吉坝写,一个long long的输入写成%d一直判我TLE,一度怀疑矩阵快速幂地复杂度orz
代码:
#include<set>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
const int maxn = 7;
const ll MOD = 2147493647;
const int INF = 0x3f3f3f3f;
using namespace std;
struct Mat{
ll s[maxn][maxn];
};
Mat mul(Mat a,Mat b){
Mat t;
memset(t.s,0,sizeof(t));
for(int i = 0;i < maxn;i++){
for(int j = 0;j < maxn;j++){
for(int k = 0;k < maxn;k++){
t.s[i][j] = (t.s[i][j] + a.s[i][k]*b.s[k][j])%MOD;
}
}
}
return t;
}
Mat pow_mat(Mat p,int n){
Mat ret;
memset(ret.s,0,sizeof(ret.s));
for(int i = 0;i < maxn;i++)
ret.s[i][i] = 1;
while(n){
if(n & 1) ret = mul(ret,p);
p = mul(p,p);
n >>= 1;
}
return ret;
}
int main(){
ll T,a,b,n;
Mat A,B,C;
memset(A.s,0,sizeof(A.s));
A.s[0][0] = A.s[0][2] = A.s[1][0] = A.s[2][2] = A.s[3][3] = A.s[4][4] = A.s[5][5] = 1;
for(int i = 0;i < 7;i++)
A.s[i][6] = 1;
A.s[1][6] = 0;
A.s[0][1] = A.s[4][5] = 2;
A.s[3][4] = A.s[3][5] = 3;
A.s[0][3] = A.s[0][5] = A.s[2][3] = A.s[2][5] = 4;
A.s[0][4] = A.s[2][4] = 6;
/*for(int i = 0;i < 7;i++){
for(int j = 0;j < 7;j++){
printf("%d ",A.s[i][j]);
}
printf("\n");
}*/
scanf("%lld",&T);
while(T--){
scanf("%lld%lld%lld",&n,&a,&b);
if(n == 1){
printf("%lld\n",a);
}
else if(n == 2){
printf("%lld\n",b);
}
else{
C = pow_mat(A,n - 2);
ll ans = 0;
ans = (C.s[0][0]*b%MOD + C.s[0][1]*a%MOD + C.s[0][2]*16%MOD +
C.s[0][3]*8%MOD + C.s[0][4]*4%MOD + C.s[0][5]*2%MOD + C.s[0][6])%MOD;
printf("%lld\n",ans);
}
}
return 0;
}
最新文章
- Python学习笔记(三)——类型与变量
- MVC的理解
- 【poj3461】 Oulipo
- java初学。加载图片
- 步步入佳境---UI入门(4) --简单练习
- python2 编码问题详解
- Java连接redis的使用示例
- cocos2d-x 添加 libLocalStorage 库...
- c/c++中const使用总结(金典)
- 百度Echarts使用心得
- 手机淘宝中的那些Web技术-使用了类似PhoneGap的实现
- const与readonly
- ABAP 内表数据 与 Json串 相互转换
- uva 12009 - Avaricious Maryanna(暴力)
- 《C++ Primer》学习笔记:迭代器介绍
- [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子
- echarts设置toolTip大小和样式问题
- iOS,添加阴影
- 安装Linux系统的磁盘分区
- 在Windows商店应用中使用浅色主题
热门文章
- 360全景图three.js与Photo-Sphere-Viewer-master 3D全景浏览开发
- 微信小游戏 Egret开发数据域官方Demo下载地址
- 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
- jQuery --- 收集表单
- AVG
- [MongoDB] 用户权限管理
- Linux救援模式
- Android中的Apk的加固(加壳)原理解析和实现(转)
- php版本管理工具composer安装及使用
- rest_framework知识总汇