P1939 【模板】矩阵加速(数列)
  • 板块题目总版
  • 楼主Kketchup
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/2/20 11:09
  • 上次更新2023/10/28 08:05:35
查看原帖
P1939 【模板】矩阵加速(数列)
551760
Kketchup楼主2022/2/20 11:09

0分WA求助!!!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod=1e9+7;

int n;

struct node
{
   long long a[10][10];
    node()
    {
        memset(a,0,sizeof a);
    }
}p,ans;

inline void init()
{
    memset(ans.a,0,sizeof(ans.a));
    for(int i=1;i<=3;++i)
    {
        ans.a[i][i]=1;
    }
    memset(p.a,0,sizeof(p.a));
    p.a[1][1]=1;
    p.a[1][3]=1;
    p.a[2][1]=1;
    p.a[3][2]=1;
}

node operator *(const node &x,const node &y)
{
    node p;
    for(int i=1;i<=3;++i)
    {
        for(int j=1;j<=3;++j)
        {
            for(int k=1;k<=3;++k)
            {
                p.a[i][j]+=((x.a[i][k]%mod)*(y.a[k][j]%mod))%mod;
            }
        }
    }
    return p;
}

inline void ksm(int k)
{
    while(k)
    {
      if(k&1) ans=ans*p;
        p=p*p;
        k>>=1;
    }
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        if(n<=3)
        {
            printf("1\n");
            continue;
        }
        init();
        ksm(n);
        printf("%lld\n",ans.a[2][1]);
    }
    return 0;
}
2022/2/20 11:09
加载中...