ps: 原本听说用set容器做是最好的...然而我并不懂..就用C语言做了...就是先输入赢得一组和输的一组,然后把重复的删掉,再比较赢得一组里没有出现在输的一组里的人数,如果是1就是YES,其他就是NO。。
代码:
#include "stdio.h" #include "string.h" char win[1000][100]; char lost[1000][100]; //定义的字符串数组... int main(){ int i,s,n,j,num,sum; int flag[1100],flag1[1100]; while(~scanf("%d",&n) && n){ for(i=0;i<n;i++){ scanf("%s %s",&win[i],&lost[i]); } num=sum=0; for(i=0;i<n;i++){ flag[i]=1; flag1[i]=1; } for(i=0;i<n;i++){ for(j=i;j<n-1;j++){ if(flag[j+1]==0) continue; if(strcmp(win[i],win[j+1])==0){ flag[j+1]=0; continue; } } } for(i=0;i<n;i++){ for(j=i;j<n-1;j++){ if(flag1[j+1]==0) continue; if(strcmp(lost[i],lost[j+1])==0){ flag1[j+1]=0; continue; } } } for(i=0;i<n;i++){ sum+=flag[i]; } for(i=0;i<n;i++){ if(flag[i]==0) continue; for(j=0;j<n;j++){ if(flag1[j]==0) continue; if(strcmp(win[i],lost[j])==0){ num++; } } } if(sum-num==1) printf("Yes\n"); else printf("No\n"); } return 0; }