本文共 805 字,大约阅读时间需要 2 分钟。
题意:现在有n个淘气的学生,他们的编号从1~n,老师每次询问一个学生就会在哪个学生的徽章上打一个洞,每次询问完一个学还是能后。一个学生就会说另一个学生a是主谋,老师就会去找a谈话。老师第一次找的学生不一定是谁,现在假设一个询问的学生是i(1~n),问你遇到的第一个徽章上已经被打过洞的学生是谁。
思路:n的数据范围很小,我们可以用(n^2)的算法实现,我们每次选择一个起点,不断的找他指出的同学,并且对我们已经便利过的学生标号进行标记,如果在某次被指出的学生已经被标记过之后,那么这个学生的标号就是答案。
#include#include #include #include using namespace std;int a[1050];int vis[1050];int main(){ int n; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&a[i]); for(int k=1; k<=n; k++) { memset(vis,0,sizeof(vis)); vis[k]=1; int u=k; while(true) { int v=a[u]; if(vis[v]) { cout< <<" "; break; } vis[v]=1; u=v; } } return 0;}
转载地址:http://vbgsi.baihongyu.com/