1 solutions

  • 1
    @ 2022-5-22 20:54:59

    这个题考察的点主要是递归,天梯赛经常出现类似的题目(有没有觉得这个题目很“天梯”呢,就连输出的风格也挺像天梯赛的,主要是出题的时候刚刚打完天梯赛~)。 当给出的学生并不是题目中所定义的大卷王时,就需要一层一层的去搜索,直到寻找到大卷王为止。由于这个题的数据范围较小(为了降低难度)可以不使用并查集的方法来完成这个题目。如果数据范围较大的话,就需要每一次进行一次集合的合并,来减少搜索的时间。 至于题目的背景是根据一些极端的例子改编的,当然有些夸张,是不是感觉真的很“卷”。还好,通过的人数比去年招新赛卷王那道题多多了~

    附代码:

    #include<stdio.h>
    int pov[10010];
    int find(int x) //不断的递归搜索,直到找到卷的源头为止 
    {
    	if (pov[x]==0)
    	{
    		return x;
    	}
    	return find(pov[x]); 
    }
    int main()
    {
    	int n,i;
    	for (i=0;i<10001;i++)//预处理每个同学的信息 
    	{
    		pov[i]=-2;
    	}
    	scanf("%d",&n);
    	for (i=0;i<n;i++)//录入每个同学的信息 
    	{
    		int s,t;
    		scanf("%d %d",&s,&t);
    		pov[s]=t;
    	}
    	int k;
    	scanf("%d",&k);
    	for (i=0;i<k;i++)
    	{
    		int s;
    		scanf("%d",&s);  
    		if (pov[s]==-1)//判断,如果是-1输出“躺平” 
    		{
    			printf("%d zai tang ping\n",s); 
    		} 
    		else if(pov[s]==0)//如果是0,则表明该同学就是卷的源头,输出“是大卷王” 
    		{
    			printf("%d shi da juan wang\n",s);
    		 }
    		 else //如果不是上述的特殊情况,则就要递归查找卷的源头 
    		 {
    		 	int Z;
    		 	Z=find(s);
    		 	printf("%d bei %d dai juan le\n",s,Z);
    		  } 
    	}
    	return 0;
     } 
    

    Information

    ID
    6511
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    130
    Accepted
    24
    Uploaded By