题解:
直接暴力循环节
然后再做几次
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> const int N=1005; int n,s,p[N],a[N],B[N]; void GetNext(int n) { for (int i=1;i<=n;i++)B[i]=a[a[i]]; for (int i=1;i<=n;i++)a[i]=B[i]; } int IsSame(int n) { for (int i=1;i<=n;i++) if (B[i]!=p[i])return 0; return 1; } int main() { while (~scanf("%d%d",&n,&s)) { for (int i=1;i<=n;i++)scanf("%d",&p[i]),a[i]=p[i]; int res; for (res=1;;res++) { GetNext(n); if (IsSame(n))break; } int m=res-s%res; while (m--)GetNext(n); for (int i=1;i<=n;i++)printf("%d\n",B[i]); } return 0; }