题目链接:http://codeforces.com/contest/1020/problem/B
题意是有n个学生干了一些不可描述的事情,然后老师要去抓人,当抓到一个学生的时候这个学生就标记1,然后这个学生会说是另一个学生让***的,然后老师就会去找另一个学生,直到老师找下一个学生的时候,该学生已经被标记过了为止,输出这个学生的编号。从1开始找,然后输出被重复找到的学生编号,然后从2开始找......直到n。
算是思维题吧,就是模拟老师找人这个过程好了,因为现在比赛还没结束...我也只是pp,不知道能不能ac...(因为看到C题的过题人数很少,又扫了一眼题,发现是不会做的题,所以就直接来写博客了...
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
int n;
int pre[1005];
int main()
{
cin>>n;
int flag = 0;
for(int i=1;i<=n;i++){
scanf("%d",&pre[i]);
}
for(int i=1;i<=n;i++){
map<int,int> ma;
int x = i;
while(1){
ma[x]++;
if(ma[x] == 2){
printf("%d ",x);
break;
}
x = pre[x];
}
}
return 0;
}