- yeyou26 的博客
[警钟撅烂]1
- 2024-1-1 17:51:34 @
警示后人
定义结构体之后记得加分号!!!
事件事故概述
2024年1月1日17点52分记
某人尝试速通Febonacci矩阵加速递推 定义结构体后没加分号 导致CE 若至错误调试耗时15分钟
PS:加上分号后无编译AC,当事人非常开心
以上,引以为戒
(附CE代码)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod = ((ll)1e9+7) ;
struct Matrix
{
ll g[3][3];
void init()
{
for(int i=1;i<=2;i++)
{
g[i][i]=1;
}
}
void clear()
{
memset(g,0,sizeof(g));
}
}
Matrix operator* (Matrix a,Matrix b)
{
Matrix ans;
ans.clear();
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
for(int k=1;k<=2;k++)
{
ans.g[i][j]+=(a.g[i][k]*b.g[k][j])%mod;
ans.g[i][j]%=mod;
}
}
}
return ans;
}
Matrix qpow(Matrix a,ll n)
{
Matrix ans;
ans.clear();
ans.init();
while(n)
{
if(n&1)
{
ans=ans*a;
}
a=a*a;
n>>=1;
}
return ans;
}
int main()
{
ll n;
cin>>n;
if(n<=2)
{
cout<<1;
return 0;
}
n-=2;
Matrix origin;
origin.clear();
origin.g[1][1]=1;
origin.g[1][2]=1;
Matrix base;
base.clear();
base.g[1][1]=0;
base.g[1][2]=1;
base.g[2][1]=1;
base.g[2][2]=1;
Matrix output=qpow(base,n);
output=origin*output;
cout<<output.g[1][2];
return 0;
}