HDU 2094解题报告

刚学完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 }

由此可见,良好的编程习惯多么重要。

posted @ 2015-02-02 20:05  Tiey  阅读(187)  评论(0编辑  收藏  举报