刚学完set,准备做个简单题目实践一下。结果半天都WA。
下面指出WA原因。
方法是这样的,把所有输的赢的都插入a1,输的插入a2;
那么如果最后name1-name2=1,则说明只有他没输过,能判断出冠军就是剩下的那个人。
1 #include<iostream> 2 #include<set> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 int n; 8 set<string> name1,name2; 9 string a1,a2; 10 while(cin>>n,n) 11 { 12 while(n--) 13 { 14 cin>>a1>>a2; 15 name1.insert(a1); 16 name1.insert(a2); 17 name2.insert(a2); 18 } 19 if(name1.size()-name2.size()==1) 20 cout<<"Yes"<<endl; 21 else 22 cout<<"No"<<endl; 23 } 24 return 0; 25 }
结果以上代码WA了。测试多次后,AC代码如下:
1 #include<iostream> 2 #include<set> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 int n; 8 set<string> name1,name2; 9 string a1,a2; 10 while(cin>>n,n) 11 { 12 while(n--) 13 { 14 cin>>a1>>a2; 15 name1.insert(a1); 16 name1.insert(a2); 17 name2.insert(a2); 18 } 19 if(name1.size()-name2.size()==1) 20 cout<<"Yes"<<endl; 21 else 22 cout<<"No"<<endl; 23 name1.clear(); 24 name2.clear(); 25 } 26 return 0; 27 }
由此可见,良好的编程习惯多么重要。