20pts求调
  • 板块P1707 刷题比赛
  • 楼主xzq4121
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/8/16 15:24
  • 上次更新2024/8/16 17:30:08
查看原帖
20pts求调
1054119
xzq4121楼主2024/8/16 15:24

我推的矩阵:

[pq1010rt1001000000000010uv10000w0000100000001010xy1020z00001000000000000101000000002110000000000100000000000W00000000000Z]\begin{bmatrix} p & q & 1 & 0 & 1 & 0 & r & t & 1 & 0 & 0\\ 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 1 & 0 & u & v & 1 & 0 & 0 & 0 & 0 & w & 0\\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 1 & 0 & 1 & 0 & x & y & 1 & 0 & 2 & 0 & z\\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & W & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & Z\\ \end{bmatrix}

和:

[a2a1b2b1c2c1kk2111]\begin{bmatrix} a_2\\ a_1\\ b_2\\ b_1\\ c_2\\ c_1\\ k\\ k^2\\ 1\\ 1\\ 1\\ \end{bmatrix}
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[12][12],ans[12][12],m,p,q,r,t,u,v,w,x,y,z,ai,bi,ci;
inline ll input(){
    ll sb=0,bs=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') bs=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        sb=(sb<<1)+(sb<<3)+(ch^48);
        ch=getchar();
    }
    return sb*bs;
}
void print(ll sb){
    if(sb<0){
        putchar('-');
        sb=-sb;
    }
    if(sb>9){
        print(sb/10);
        putchar(sb%10+'0');
    }
    else putchar(sb+'0');
    return;
}
void chen1(){
    ll c[12][12];
    for(int i=1;i<=11;i++)for(int j=1;j<=11;j++)c[i][j]=ans[i][j];
    memset(ans,0,sizeof(ans));
    for(int i=1;i<=11;i++)for(int j=1;j<=11;j++)for(int k=1;k<=11;k++)ans[i][j]=(ll)(__int128(ans[i][j]+__int128(c[i][k]*a[k][j])%m)%m)%m;
}
void chen2(){
    ll c[12][12];
    for(int i=1;i<=11;i++)for(int j=1;j<=11;j++)c[i][j]=a[i][j];
    memset(a,0,sizeof(a));
    for(int i=1;i<=11;i++)for(int j=1;j<=11;j++)for(int k=1;k<=11;k++)a[i][j]=(ll)(__int128(a[i][j]+__int128(c[i][k]*c[k][j])%m)%m)%m;
}
void km(ll n){
    while(n){
        if(n&1) chen1();
        chen2();
        n>>=1;
    }
}
int main(){
    n=input(),m=input(),p=input(),q=input(),r=input(),t=input(),u=input(),v=input(),w=input(),x=input(),y=input(),z=input();
    n-=2;
    for(int i=1;i<=11;i++) ans[i][i]=1;
    a[1][1]=p,a[1][2]=q,a[1][3]=1,a[1][5]=1,a[1][7]=r,a[1][8]=t,a[1][9]=1,a[2][1]=1,a[3][1]=1,a[3][3]=u,a[3][4]=v,a[3][5]=1,a[3][10]=w,a[4][3]=1,a[5][1]=1,a[5][3]=1,a[5][5]=x,a[5][6]=y,a[5][7]=1,a[5][9]=2,a[5][11]=z,a[6][5]=1,a[7][7]=1,a[7][9]=1,a[8][7]=2,a[8][8]=1,a[8][9]=1,a[9][9]=1,a[10][10]=w,a[11][11]=z;
    km(n);
    ai=(ll)(__int128(ans[1][1]*3+ans[1][2]+ans[1][3]*3+ans[1][4]+ans[1][5]*3+ans[1][6]+ans[1][7]+ans[1][8]+ans[1][9]+ans[1][10]+ans[1][11])%m);
    bi=(ll)(__int128(ans[3][1]*3+ans[3][2]+ans[3][3]*3+ans[3][4]+ans[3][5]*3+ans[3][6]+ans[3][7]+ans[3][8]+ans[3][9]+ans[3][10]+ans[3][11])%m);
    ci=(ll)(__int128(ans[5][1]*3+ans[5][2]+ans[5][3]*3+ans[5][4]+ans[5][5]*3+ans[5][6]+ans[5][7]+ans[5][8]+ans[5][9]+ans[5][10]+ans[5][11])%m);
    printf("nodgd "),print(ai),printf("\n"),printf("Ciocio "),print(bi),printf("\n"),printf("Nicole "),print(ci);
    return 0;
}
2024/8/16 15:24
加载中...