【题目地址】HDU 4985 这个题目是出自Best Coder的一场比赛(BestCoder Round #7)
【题目大意】题意比较难理解,当时我也没看懂,看了一下别人的题解,说是置换群,然后我才明白了这一切……
【代码】
#include <iostream>
#include <cstdio>
#define MAXN 10+100000
using namespace std;
int arr[MAXN];
bool vis[MAXN];
int main()
{
freopen("in.txt","r",stdin);
int n;
while(cin>>n){
for(int i = 1; i <= n; i++)
scanf("%d",&arr[i]);
for(int i = 1; i <= n; i++){
vis[i] = false;
}
for(int now = 1; now <= n; now++){
if(vis[now])
continue;
printf("(");
printf("%d",now);
vis[now] = true;
now = arr[now];
while(!vis[now]){
printf(" %d",now);
vis[now] = true;
now = arr[now];
}
printf(")");
}
printf("\n");
}
return 0;
}
【后记】好好体味一下置换群中应用的技巧