集合使用

来源:互联网 发布:联想双系统启动ubuntu 编辑:程序博客网 时间:2024/06/07 09:47

这个题我用了三种方法做,都是超时,最后set也超时,后来看人家的解题报告才明白,输入有问题,这种输入要考虑很多方面,今天又学到了一个分割字符串的方法,如下:

 

str1,str2都是string类型

 

描述

给定两个集合A和B的所有元素,计算它们的交、并、差集。

输入

输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成集合A,第二行的所有整数构成集合B,分别用空格分隔。A和B最多分别不超过100个元素。

输出

输出A、B的交、并、差集中的所有元素(以递增顺序)。每个集合占一行,数据元素之间用空格分隔。

样例输入

1
0 1 2 3 4 5 6 7 8 8
3 6 8 9

样例输出

3 6 8
0 1 2 3 4 5 6 7 8 9
0 1 2 4 5 7

 

#include<iostream>#include<cstring>#include<sstream>#include<cstdio>#include <algorithm>#include<set>using namespace std;int main(){    set<int>a;    set<int>b;    set<int>c;    int n,x,l,aa;    string str1,str2;    scanf("%d",&n);    getchar();    while(n--)    {       int i=0,j=0,x=0,f=1,t;        getline(cin,str1);       std::stringstream ss(str1);      while (ss>>aa)      {       a.insert(aa);      }        getline(cin,str2);       std::stringstream ss1(str2);      while (ss1>>aa)      {         b.insert(aa);      }        set<int>::iterator ii;      //  set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator(set<int> >(c,c.begin())));        set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));        l=c.size();i=0;        for(ii=c.begin();ii!=c.end();ii++)          {              i++;                if(i<l) printf("%d ",(*ii));            else printf("%d\n",*ii);          }            c.clear();        set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));       l=c.size();i=0;        for(ii=c.begin();ii!=c.end();ii++)          {              i++;             if(i<l) printf("%d ",(*ii));            else printf("%d\n",(*ii));            //  if(i<l)cout<<(*ii)<<" ";             // else cout<<(*ii)<<endl;          }            c.clear();        set_difference(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));         l=c.size();i=0;        for(ii=c.begin();ii!=c.end();ii++)          {              i++;               if(i<l) printf("%d ",(*ii));            else printf("%d\n",(*ii));          }            c.clear();    }    return 0;}


 

原创粉丝点击