产生冠军
http://acm.hdu.edu.cn/showproblem.php?pid=2094
View Code
1 #include<iostream> 2 #include<cstring> 3 using namespace std ; 4 #define maxn 1005 5 int main() 6 { 7 int n, i, j ; 8 char a[maxn][100], b[maxn][100] ; 9 int c[maxn], sum[maxn] ; 10 while(cin>>n,n!=0) 11 { 12 memset(sum, 0, sizeof(sum)) ;//0表示败 13 for(i=0; i<n; i++) 14 { 15 cin>>a[i]>>b[i] ; 16 sum[i] = 1 ;//1表示赢 17 } 18 for(i=0; i<n; i++) 19 for(j=0; j<n; j++) 20 { 21 if(strcmp(a[i],b[j])==0) 22 sum[i] = 0 ; 23 } 24 int k = 0 ; 25 for(i=0; i<n; i++) 26 { 27 if(sum[i]==1) 28 c[k++] = i ; 29 } 30 int count = 0 ; 31 for(i=1; i<k; i++) 32 { 33 if(strcmp(a[c[i]],a[c[i-1]])==0) 34 count++ ; 35 } 36 if(count==k-1)//只有一个人是冠军,且没有败过 37 cout<<"Yes"<<endl ; 38 else 39 cout<<"No"<<endl ; 40 } 41 return 0 ; 42 }