- 模板库应用2-集合1
题目ID:7302必做题100分
最新提交:
Runtime Error
0 分
历史最高:
Runtime Error
0 分
时间限制: 1000ms
空间限制: 524288kB
题目描述
题目描述
现在有10个集合(元素不可重),编号为0~9,现在有6种操作:
给一个集合x插入一个数y。
给一个集合x删除一个数y(如果没有就不删)。
给两个集合x,y,将集合x=x∪y(集合求并集),并将y清空。
给两个集合x,y,将集合x=x∩y(集合求交集),并将y清空。
给一个集合x和一个数y,询问集合x中是否出现了y。
给一个集合x,问集合x中有多少个数。
不保证所有数不相同。
注意操作3与操作4:当x=y时,操作后将y清空,由于x=y,所以集合x是空集。
输入描述
输入一个n,表示接下来有n次操作,
接下来n行每行一个数op,
若op=1~5,则之后再跟两个数x,y。
若op=6,则之后再跟一个数x。
输出描述
对于每个操作5,6各输出一行表示答案
样例输入
15
1 3 62201
4 1 4
6 3
2 4 42881
2 9 90161
5 4 11649
3 8 3
4 9 5
1 6 54033
6 0
2 3 60171
1 7 84681
3 5 4
1 1 98337
5 0 24497
样例输出
1
No
0
No
数据范围
n=100000,集合编号小于10,数字小于等于100000
时空限制
1s,512M
错误代码如下
#include<bits/stdc++.h>
using namespace std;
set s[20];
set st;
int n,op,x,y;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>op>>x;
if(op!=6)
{
cin>>y;
if(op==1)
s.insert(y);
if(op==2)
{
set::iterator it=s.find(y);
if(*it==y)
{
s.erase(it);
}
}
if(op==3)
{
for(set::iterator it=s[y].begin();it!=s[y].end();it++)
s.insert(it);
s[y].clear();
}
if(op==4)
{
for(set::iterator it=s[y].begin();it!=s[y].end();it++)
{
if((s.find(*it))==*it)
{
st.insert(*it);
}
}
s.clear();
for(set::iterator it=st.begin();it!=st.end();it++)
s.insert(it);
}
if(op==5)
{
if((s.find(y))==y)
cout<<“Yes”<<endl;
else
cout<<“No”<<endl;
}
}
else
{
cout<<s.size()<<endl;
}
}
}