CF上WA on #9,求调
  • 板块CF185A Plant
  • 楼主114514xxx
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/10 21:59
  • 上次更新2024/9/11 15:35:30
查看原帖
CF上WA on #9,求调
749175
114514xxx楼主2024/9/10 21:59
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int MOD=1e9+7;
inline int read(){
    int x=0,f=1;
    char c=getchar();
    while(!isdigit(c)){
        if(c=='-')f*=-1;
        c=getchar();
    }
    while(isdigit(c)){
        x=(x<<3)+(x<<1)+(c^48);
        c=getchar();
    }
    return x*f;
}
inline void write(int x){
    if(x<10)putchar(x+'0');
    else write(x/10),putchar(x%10+'0');
}
int n;
int a[10][10],ans[10][10];
inline void matrix_pow1(){
    int c[10][10]={0};
    for(int k=1;k<=3;k++)
        for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
                c[i][j]=(c[i][j]+ans[i][k]*a[k][j])%MOD;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            ans[i][j]=c[i][j];
}
inline void matrix_pow2(){
    int c[10][10]={0};
    for(int k=1;k<=3;k++)
        for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
                c[i][j]=(c[i][j]+a[i][k]*a[k][j])%MOD;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            a[i][j]=c[i][j];
}
signed main(){
    n=read();
    a[1][1]=2,a[1][2]=1,a[1][3]=0;
    a[3][1]=1,a[3][2]=0,a[3][3]=4;
    for(int i=1;i<=3;i++)
        ans[i][i]=1;
    n-=1;
    while(n){
        if(n&1)matrix_pow1();
        matrix_pow2();
        n/=2;
    }
    int a1=(3*(ans[1][1]%MOD))%MOD;
    int a2=(4*(ans[3][1]%MOD))%MOD;
    write((a1+a2)%MOD);
}

2024/9/10 21:59
加载中...