ACM SET集合

来源:互联网 发布:哥们诛神法宝升级数据 编辑:程序博客网 时间:2024/06/13 21:17

原题链接:

      http://newoj.acmclub.cn/problems/1682

题目描述:

         STL库中有许多非常实用的函数,如sort,set,map,vector,queue等。

   此题为set集合的应用教学,题目如下:

   运动会又开始了,acm俱乐部的出题组成员因要忙着出题,便向教主申请了请假,教主写下了请假名单。

   某成员因不在请假名单而被担心记上了名,现在他偷偷搞到了记名名单,想要偷偷抹掉自己的名字。

   请通过set集合进行解答,如果他在这份记名名单中就删除他的名字并按字典序输出还在名单上的名字,

   若不在则输出 song

输入:

      第一行 包括整数n(名单人数,可能有重复)和 name (某成员的名字) 

   第二行  请假名单

输出:

         如果他在这份记名名单中就删除他的名字并按字典序输出还在名单上的名字,

     若不在则输出 song

样例输入

           5 zgc

           zgc czh zn wsw zn

样例输出

           czh wsw zn

解题思路:

              这是一道专门考察对set集合应用的编程题,因为在set集合的特点是:不允许有重复的元素,而且会根据元素的键值自动排序,在set集合中元素的实值就是元素的                        键值,元素的键值就是元素的实值。因此可以挨个检测set集合中的值,检测其是否与待比较的值相同,如果相同的话,就将相同的删去;如果没有一个元素相同,                      就输出song

代码:

        

#include <bits/stdc++.h>using namespace std;int main(){set <string> s1;string stu,stu1;int n,flag=1;cin>>n>>stu;while(n--){cin>>stu1;s1.insert(stu1);}set<string>::iterator ite1 = s1.begin();set<string>::iterator ite2 = s1.end();for(;ite1 != ite2;ite1++)  if(*ite1 == stu){  flag = 0;  s1.erase(*ite1);  }ite1 = s1.begin();if(flag == 1)  cout<<"song"<<endl;else{  for(;ite1 != ite2;ite1++){       cout<<*ite1<<" ";   }} return 0;}

原创粉丝点击