AC了嘛
2 个赞
@曾天云 没有AC,现在WA了,ԾㅂԾ,
改完以后的代码:
#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;
}
1 个赞
没有人求调了吗QAQ
1 个赞
题目里有特判,得加,不然过不了
2 个赞
那特判是什么呢
1 个赞
注意操作3与操作4:当x=y时,操作后将y清空,由于x=y,所以集合x是空集。
2 个赞
我当时也没写那个,然后调了很久
2 个赞
对呀,我的代码没有问题呀
1 个赞
if(x==y) s[x].clear();
在a==3或4时都要加上
2 个赞
你的意思是代码要改成这样是吗
#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){
if(x==y)s[x].clear();
else{
for(set<int>::iterator it=s[y].begin();it!=s[y].end();it++)s[x].insert(*it);
s[y].clear();
}
}
else if(a==4){
if(x==y)s[x].clear();
else{
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;
}
1 个赞
这样应该可以过
2 个赞
eee,问题是没有过
1 个赞
s[x].erase(*it);
2 个赞
?什么意思
1 个赞
发 AC 代码,赶紧删掉
3 个赞
用迭代器需要写*it,但是auto不用,自己检查一下
2 个赞