警示后人

定义结构体之后记得加分号!!!

事件事故概述

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;
}