王钰宸涵
(ゴテンクス)
1
题目:普及1课内 DS+STL - 信友队
题面:
现在有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;
int n,x,y,a;
set<int>s[15];
set<int>sw;
int main(){
cin>>n;
while(n--){
cin>>a;
if(a==6){
cin>>x;
cout<<s[x].size()<<'\n';
}
else{
cin>>x>>y;
if(a==1)s[x].insert(y);
else if(a==2){
if(s[x].count(y)!=0){
set<int>::iterator it=s[x].find(y);
s[x].erase(it);
}
}
else if(a==3){
for(set<int>::iterator it=s[y].begin();it!=s[y].end();it++)s[x].insert(*it);
s[y].clear();
}
else if(a==4){
sw.clear();
for(set<int>::iterator it=s[x].begin();it!=s[x].end();it++)sw.insert(*it);
for(auto it:s[x])if(s[y].count(it))sw.insert(it);
s[y].clear();
s[x]=sw;
}
else{
if(s[x].count(y))puts("Yes");
else puts("No");
}
}
}
return 0;
}
WA 爆0
dalao 求调!
1 个赞
王钰宸涵
(ゴテンクス)
2
1 个赞
曾天云
(曾天云)
3
2 个赞
王钰宸涵
(ゴテンクス)
4
@曾天云 我没有给 sw
用 s[x]
的 iterator
呀?
1 个赞
曾天云
(曾天云)
5
for(set<int>::iterator it=s[x].begin();it!=s[x].end();it++)if(s[y].count(*it)==0&&!sw.empty())sw.erase(it);
it是s【x】的你sw.erase(it)
2 个赞
王钰宸涵
(ゴテンクス)
13
#include<bits/stdc++.h>
using namespace std;
int n,x,y,a;
set<int>s[15];
set<int>sw;
int main(){
cin>>n;
while(n--){
cin>>a;
if(a==6){
cin>>x;
cout<<s[x].size()<<'\n';
}
else{
cin>>x>>y;
if(a==1)s[x].insert(y);
else if(a==2){
if(s[x].count(y)!=0){
set<int>::iterator it=s[x].find(y);
s[x].erase(it);
}
}
else if(a==3){
for(set<int>::iterator it=s[y].begin();it!=s[y].end();it++)s[x].insert(*it);
s[y].clear();
}
else if(a==4){
sw.clear();
for(set<int>::iterator it=s[x].begin();it!=s[x].end();it++)sw.insert(*it);
for(set<int>::iterator it=sw.begin();it!=sw.end();it++)if(s[y].count(*it)==0&&!sw.empty())sw.erase(it);
s[y].clear();
s[x].clear();
for(set<int>::iterator it=sw.begin();it!=sw.end();it++)s[x].insert(*it);
}
else{
if(s[x].count(y))puts("Yes");
else puts("No");
}
}
}
return 0;
}
1 个赞
曾天云
(曾天云)
14
1.for(set<int>::iterator it=sw.begin();it!=sw.end();it++)s[x].insert(*it);
→ s[x]=tmp;
2.for(auto i:s[x])if(s[y].count(i))sw.push(i);
2 个赞
曾天云
(曾天云)
18
else if(a==4){
sw.clear();
for(auto it:x)if(a[y].count(it))sw.insert(it);
s[x]=sw;
s[y].clear();
}
2 个赞
曾天云
(曾天云)
21
当然,同种的类型均可
struct t{
......
}a,b;
int main(){
a=b;
}
2 个赞