2967. 公共元素

Li Dao

这题简直是为STL中的交集运算而生的

include

using namespace std;
int T,n;
set a,b,c;
set tmp1,tmp2;
int main()
{
cin>>T;
for(int step=0;step>x>>y>>z;
a.clear();b.clear();c.clear();
for(int i=1;i<=x;i++)
{
int xx;cin>>xx;
a.insert(xx);
}
for(int i=1;i<=y;i++)
{
int xx;cin>>xx;
b.insert(xx);
}
for(int i=1;i<=z;i++)
{
int xx;cin>>xx;
c.insert(xx);
}

tmp1.clear();tmp2.clear();
set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(tmp1,tmp1.begin()));
set_intersection(tmp1.begin(),tmp1.end(),c.begin(),c.end(),inserter(tmp2,tmp2.begin()));

set<int>::iterator iter=tmp2.begin();
printf("case #%d:\n",step);
int ff=1;
if(tmp2.size()==0) cout<<-1;
while(iter!=tmp2.end())
{
  if(ff) ff=0; else cout<<' ';
  cout<<(*iter);
  ++iter;
}
cout<<endl;

}
return 0;
}

说一说,STL中的交集,并集,差集运算的写法!
stl 集合运算
set_intersection(xx.begin(),xx.end(),yy.begin(),yy.end(),inserter(I,I.begin()));
差集
set_union并集
set_intersection交集

以下是迭代的方法:
set::iterator iter=tmp2.begin();
while(iter!=tmp2.end())
{
cout<<(*iter);
++iter;
}

查看set中元素的个数 SET.size()
照葫芦画瓢即可

10175102262 LarsPendragon

原来python这么强的啊……感谢大佬指点@10175102211

T=int(input())
for I in range(T):
    a, b, c=input().split()
    l1=tuple(map(int, input().split()))
    l2=tuple(map(int, input().split()))
    l3=tuple(map(int, input().split()))
    l4=[]
    for x in l1:
        if x in l2 and x in l3:
            l4.append(x)
    l4.sort()
    print("case #%d:"%I)
    if len(l4)==0:
        print(-1)
    else:
        for x in range(len(l4)-1):
            print(l4[x], end=" ")
        print(l4[-1])
告白于荆州

都用上Python了 这题很明显考虑用集合 直接三个集合求交集就完事了
打个广告,过了的同学可以看看我的代码(溜

你当前正在回复 博客/题目
存在问题!