杭电acm2094产生冠军(2)

另一种解法(好像属于动态规划),我不是特别理解,但是也能ac,代码如下:

#include <stdio.h>  
#include <string.h>  
struct  A 
{  
  char name[50];  
  int a;  
}s[1005];  
int main ()  
{  
int n,i,j,t,p;  
char n1[50],n2[50];  
while (scanf("%d",&n)!=EOF,n)  
{  
   t=0;  
   for (i=0;i<n;i++)  
   {  
      scanf("%s %s",n1,n2);//输入。。  
      for (j=0;j<t;j++)  
   {  
           if (strcmp(n1,s[j].name)==0) break;  // 和已存的名字比较,看是否重复了  
   }  
      if (j==t) //将名字复制到结构体的name中,并复制a为0,(出现多少赢过的至少一场比赛的人)t++;  
  {  
    strcpy(s[j].name,n1);  
    s[j].a=0;  
    t++;  
  }  
  for (j=0;j<t;j++)    
  {  
       if (strcmp(n2,s[j].name)==0) //看n2是否出现过,若出现过则记录输的次数。  
    {  
     s[j].a+=1;  
     break;  
    }  
  }  
  if (j==t) //j==t,说明n2没出现过,所以将名字复制到s[j].name中。  
  {  
    strcpy(s[j].name,n2);  
    s[j].a=1;  
    t++;  
  }  
   }  
   p=0;  
   for (i=0;i<t;i++)  
   {  
      if (s[i].a==0)   
      p++;  
   }  
   if (p==1) printf ("Yes\n");  
   else printf ("No\n");  
}  
return 0;  
}   

你可能感兴趣的:(杭电acm2094产生冠军(2))