这一题的题意好难,
题意是,保证所有的点都要在一个环内,否则输出-1
如果所有点都在环内,找出最小的t。
所以求出每个环的长度,如果是偶数,直接除以二。
如果是奇数,则不变。
然后全部的积,再除以他们的最大公倍数,即为所求。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn=100+10;
int b[maxn];
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
int main(){
int n;
int a[maxn];
LL ans=1;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
if(b[i]) continue;
int cnt=0,j;
for(j=i;b[j]==0;j=a[j]){
b[j]=1;
cnt++;
}
if(j!=i){
printf("-1\n");
return 0;
}
if(cnt%2==0) cnt/=2;
ans=ans*cnt/gcd(ans,cnt);
}
printf("%lld\n",ans);
return 0;
}