ACM SETセット

1446 ワード

原題リンク:
      http://newoj.acmclub.cn/problems/1682
タイトルの説明:
         STLライブラリにはsort,set,map,vector,queueなどの非常に実用的な関数がたくさんあります.
   この問題はset集合の応用教育であり、テーマは以下の通りである.
   運動会が再開され、acmクラブの出題チームのメンバーが出題に追われ、教主に休暇を申請し、教主が休暇リストを書いた.
   あるメンバーは欠席者リストにいないので名前を記入するのではないかと心配されていたが、今はこっそり名前リストを手に入れ、自分の名前を消したいと思っていた.
   set集合で解答してください.もし彼がこの記名リストから彼の名前を削除して辞書順にリストにある名前を出力したら、
   いなければsongを出力する
入力:
      最初の行には整数n(リスト数、重複する可能性がある)とname(メンバーの名前)が含まれます. 
   2行目  休暇届
出力:
         もし彼がこの記名リストから名前を削除して辞書順にリストに残っている名前を出力したら、
     いなければ出力 song
サンプル入力
           5 zgc
           zgc czh zn wsw zn
サンプル出力
           czh wsw zn
問題解決の考え方:
              これはset集合への応用を専門に考察するプログラミング問題である.set集合の特徴は、重複する要素が許されず、要素のキー値に基づいて自動的にソートされ、set集合における要素の実値が要素であるからである.                       キー値、要素のキー値は要素の実値です.したがって、setセットの値を1つずつ検出し、比較対象の値と同じかどうかを検出し、同じであれば同じを削除することができる.同じ要素が1つもない場合は、                     出力song
コード:
        
#include 
using namespace std;
int main(){
	set  s1;
	string stu,stu1;
	int n,flag=1;
	cin>>n>>stu;
	while(n--){
		cin>>stu1;
		s1.insert(stu1);
	}
	set::iterator ite1 = s1.begin();
	set::iterator ite2 = s1.end();
	for(;ite1 != ite2;ite1++)
	  if(*ite1 == stu){
	  	flag = 0;
	  	s1.erase(*ite1);
	  }
	ite1 = s1.begin();
	if(flag == 1)
	  cout<