我的代码:
#include<bits/stdc++.h>
#define int long long
#define MAXN 100010
using namespace std;
int n,K;
struct Node{
int x[MAXN];
Node(int xx=0){memset(x,0,sizeof(x));}
int& operator[](const int p){return x[p];}
}e,p,q,C,ans;
Node operator*(Node a,Node b){
Node ret;
for(int i=1;i<=n;i++)ret[i]=a[b[i]];
return ret;
}
Node operator^(Node a,int b){
Node ret=e;
for(;b;b>>=1,a=a*a)if(b&1)ret=ret*a;
return ret;
}
Node inv(Node a){
Node ret;
for(int i=1;i<=n;i++)ret[a[i]]=i;
return ret;
}
signed main(){
scanf("%lld%lld",&n,&K);
for(int i=1;i<=n;i++){
int x;scanf("%lld",&x);
p[i]=x;
}
for(int i=1;i<=n;i++){
int x;scanf("%lld",&x);
q[i]=x;
}K--;
for(int i=1;i<=n;i++)e[i]=i;
C=q*inv(p)*inv(q)*p;
if(K%6==0)ans=p;
if(K%6==1)ans=q;
if(K%6==2)ans=q*inv(p);
if(K%6==3)ans=q*inv(p)*inv(q);
if(K%6==4)ans=q*inv(p)*inv(q)*p*inv(q);
if(K%6==5)ans=q*inv(p)*inv(q)*p*p*inv(q);
ans=(C^(K/6))*ans*(inv(C)^(K/6));
for(int i=1;i<=n;i++)printf("%lld ",ans[i]);
return 0;
}
然后这个代码在本机输入都没法输入,交到 OJ 上 AC 了,CF 上也没查出来 ub(
好像我之前也遇到过类似的情况,求助(