求调悬3关
查看原帖
求调悬3关
616996
Graph楼主2024/4/13 16:32

rt,样例对。

#include<bits/stdc++.h>
using namespace std;
#define int long long 

const int N=150;
int n,s,m,k;
class Node
{
public:
    int a[N][N];
    Node(){
        memset(a,0,sizeof a);
    }
    Node operator*(const Node& tmp)const
    {
        Node kkk;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++)
                    kkk.a[i][j]+=this->a[i][k]*tmp.a[k][j];
        return kkk;
    }
}num,A,B,ans;

Node qpow_jz(Node a,int b)
{
    if(b==1)
        return a;
    Node tmp=qpow_jz(a,b>>1);
    if(b%2==0)
        return tmp*tmp;
    return tmp*tmp*a;
}

signed main()
{
    cin>>n>>s>>m>>k;
    for(int i=1;i<=n;i++)
        cin>>num.a[1][i];
    for(int i=1;i<=n;i++)
        ans.a[i][i]=1;
    for(int i=1;i<=n;i++)
    {
        A.a[i%n+1][i]=1;
        B.a[i][i]=1;
        if(i==m||i==s)
            B.a[i][i]=0,B.a[i][i^m^s]=1;
    }
    ans=ans*qpow_jz(A*B,k);
    num=num*ans;
    for(int i=1;i<=n;i++)
        cout<<num.a[1][i]<<" ";
    return 0;
}
2024/4/13 16:32
加载中...