set容器:
1、set中的元素都是排好序的
2、set集合中沒有重複的元素
常用操作:
begin() 返回set容器的第一個元素的地址
end() 返回set容器的最後一個元素地址
count() 返回某個值元素的個數
clear() 刪除set容器中的所有的元素
empty() 判斷set容器是否爲空
max_size() 返回set容器可能包含的元素最大個數
size() 返回當前set容器中的元素個數
erase(it) 刪除迭代器指針it處元素
insert(a) 插入某個元素
問題鏈接:HDU2094 產生冠軍
Problem Description 有一羣人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。
Input 輸入含有一些選手羣,每羣選手都以一個整數n(n<1000)開頭,後跟n對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者戰勝後者。如果n爲0,則表示輸入結束。
Output 對於每個選手羣,若你判斷出產生了冠軍,則在一行中輸出“Yes”,否則在一行中輸出“No”。
Sample Input 3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
Sample Output Yes No
Author qianneng
Source |
問題分析:比賽中互有勝負,將所有人放入一個集合中,輸的人放入另外一個集合中。只有唯一1個人沒有輸時,才產生冠軍。
程序中,使用STL的集合類set來實現。
#include <iostream>
#include <string>
#include <set>
using namespace std;
////////////ac set的使用
int main()
{
int n;
set<string> all,lose;
string w,l;
while(cin>>n&&n!=0)
{
all.clear();
lose.clear();
while(n--)
{
cin>>w>>l;
all.insert(w);
all.insert(l);
lose.insert(l);
}
if(all.size()-lose.size()==1)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}