社区讨论
多测清空问题求助
P1939矩阵加速(数列)参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo1076cw
- 此快照首次捕获于
- 2023/10/22 13:03 2 年前
- 此快照最后确认于
- 2023/11/02 12:33 2 年前
rt,不知道哪里没清空,就算ans和base开局部变量还是G
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Mat{
int c[105][105];
int lenth;
int wide;
};
const int mod=1e9+7;
Mat operator *(const Mat &a,const Mat &b){
Mat ret;
int n=a.wide;
for(int i=1;i<=a.lenth;i++){
for(int j=1;j<=b.wide;j++){
int nowans=0;
for(int k=1;k<=n;k++){
nowans+=(a.c[i][k]*b.c[k][j]%mod);
nowans%=mod;
}
ret.c[i][j]=nowans;
}
}
ret.lenth=a.lenth;
ret.wide=b.wide;
return ret;
}
Mat qpow(Mat a,int b){
Mat ret;
ret.lenth=ret.wide=101;
for(int i=1;i<=101;i++){
ret.c[i][i]=1;
}
while(b){
if(b%2==1){
ret=ret*a;
}
b/=2;
a=a*a;
}
return ret;
}
Mat ans;
Mat base;
signed main(){
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--){
ans.lenth=1;
ans.wide=3;
ans.c[1][1]=ans.c[1][2]=ans.c[1][3]=1;
base.lenth=base.wide=3;
base.c[1][1]=1;
base.c[1][2]=1;
base.c[1][3]=0;
base.c[2][1]=0;
base.c[2][2]=0;
base.c[2][3]=1;
base.c[3][1]=1;
base.c[3][2]=0;
base.c[3][3]=0;
int n;
cin >> n;
ans=ans*qpow(base,n-3);
cout<<ans.c[1][1]<<endl;
}
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...