Codeforces Round #503 (by SIS, Div. 2) B. Badge(思维)

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/Charles_Zaqdt/article/details/81592195