说到集合相关的操作就不得不提一下python对此的支持
input() a, b = set(input().split()), set(input().split()) for op in "&|-": s = eval(f'sorted(a{op}b,key=int)') print('{' + ','.join(s) + '}')
这里有更多相关内容->官方文档
楼上代码年久失修,贴一份新的23333 从C转C++的表示STL真是牛批
#include <iostream> #include <algorithm> #include <set> using namespace std; void print(set<int>& s) { cout<<"{"; if (s.size()==0) cout<<"}"<<endl; else { auto it = s.begin(); int i=0; for (;i<s.size()-1;++it,++i) cout<<*it<<","; cout<<*it<<"}"<<endl; } } int main() { int n1,n2,tmp; set<int> x,y,a,b,c; cin>>n1>>n2; int i,j; for (i=0;i<n1;++i) { cin>>tmp; x.insert(tmp); } for (i=0;i<n2;++i) { cin>>tmp; y.insert(tmp); } set_intersection(x.begin(),x.end(),y.begin(),y.end(),inserter(a,a.end())); set_union(x.begin(),x.end(),y.begin(),y.end(),inserter(b,b.end())); set_difference(x.begin(),x.end(),y.begin(),y.end(),inserter(c,c.end())); print(a); print(b); print(c); }
给大家一种用STL的写法作参考
using namespace std; int T,a,b; set xx,yy,U,I,D; void solve() { set_intersection(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(I,I.begin())); set_union(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(U,U.begin())); set_difference(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(D,D.begin())); return; } void print(set::iterator iter,set::iterator end) { cout<<’{‘; int ff=1;
while(iter!=end) { int tmp=(*iter); if(ff) {ff=0;cout<<tmp;} else cout<<’,’<<tmp; ++iter; } cout<<”}\n”; } int main() { cin>>a>>b; xx.clear();yy.clear(); for(int i=1;i<=a;i++) { int tmp; cin>>tmp; xx.insert(tmp); } for(int i=1;i<=b;i++) { int tmp; cin>>tmp; yy.insert(tmp); } solve(); print(I.begin(),I.end());print(U.begin(),U.end());print(D.begin(),D.end()); return 0; }
数据太黑了,两点注意 输入数据是对的,都是按照集合里的互异性给的两组,不用考虑输入时那两个组里的单独的去重。 不过,我要吐槽这道题没有给出最大的元素是有多大,本来一个很好的思路,用一个数组三次遍历就可以完成,最终还是败给了那个最大的数。。。 [em:15] [em:03] [em:13]
这道题和27题一样 要刷分的同学们抓紧时间
说到集合相关的操作就不得不提一下python对此的支持
这里有更多相关内容->官方文档
楼上代码年久失修,贴一份新的23333
从C转C++的表示STL真是牛批
给大家一种用STL的写法作参考
include
using namespace std;
int T,a,b;
set xx,yy,U,I,D;
void solve()
{
set_intersection(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(I,I.begin()));
set_union(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(U,U.begin()));
set_difference(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(D,D.begin()));
return;
}
void print(set::iterator iter,set::iterator end)
{
cout<<’{‘;
int ff=1;
while(iter!=end)
{
int tmp=(*iter);
if(ff) {ff=0;cout<<tmp;}
else cout<<’,’<<tmp;
++iter;
}
cout<<”}\n”;
}
int main()
{
cin>>a>>b;
xx.clear();yy.clear();
for(int i=1;i<=a;i++)
{
int tmp;
cin>>tmp;
xx.insert(tmp);
}
for(int i=1;i<=b;i++)
{
int tmp;
cin>>tmp;
yy.insert(tmp);
}
solve();
print(I.begin(),I.end());print(U.begin(),U.end());print(D.begin(),D.end());
return 0;
}
数据太黑了,两点注意
输入数据是对的,都是按照集合里的互异性给的两组,不用考虑输入时那两个组里的单独的去重。
不过,我要吐槽这道题没有给出最大的元素是有多大,本来一个很好的思路,用一个数组三次遍历就可以完成,最终还是败给了那个最大的数。。。
[em:15]
[em:03]
[em:13]
这道题和27题一样 要刷分的同学们抓紧时间