Time limit per test: 2.0 seconds
Memory limit: 256 megabytes
给定三个自然数数组(长度为 1-100),求在三个数组中都存在的元素,-1 表示三个数组没有公共元素。
Input
第 1 行:整数
T
T
() 为问题数
第 2 行,以空格隔开的三个数组的长度
第 3 行,以空格隔开的第一个数组
第 4 行,以空格隔开的第二个数组
第 5 行,以空格隔开的第三个数组
第 6 ∽ 4*T+1 行:后面每一个问题中的数据,格式与第一个问题相同。
Output
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中按从小到大的顺序输出三个数组的公共元素,元素间以空格隔开,最后一个元素后没有空格但有回车。如果三个数组中没有公共元素,则输出-1。
Examples
input
4
2 3 4
0 3
4 3 0
3 9 0 7
3 2 4
3 2 9
1 4
3 2 8 7
9 8 7
9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2
9 8 7 6 5 4 3
30 25 35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
8 9 1 5 10 20 43 42 21 22 23 12 13 41 40 39 14 2 6 7 3 4 19 45 44
8 9 1 2 6 7 3 4 5 10 20 21 22 23 12 13 14 19 25 27 31 24 11 15 16 28 17 18 29 30 35 33 26 34 32
output
case #0:
0 3
case #1:
-1
case #2:
3 4 5 6 7 8 9
case #3:
1 2 3 4 5 6 7 8 9 10 12 13 14 19 20 21 22 23
分析:
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;
}
#include <bits/stdc++.h>
using namespace std;
#define mem(a,n) memset(a,n,sizeof(a))
#define memc(a,b) memcpy(a,b,sizeof(b))
#define rep(i,a,n) for(int i=a;i<n;i++) ///[a,n)
#define dec(i,n,a) for(int i=n;i>=a;i--)///[n,a]
#define pb push_back
#define fi first
#define se second
#define IO ios::sync_with_stdio(false)
#define fre freopen("in.txt","r",stdin)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef long long ll;
typedef unsigned long long ull;
const double PI=acos(-1.0);
const double E=2.718281828459045;
const double eps=1e-8;
const int INF=0x3f3f3f3f;
const int MOD=258280327;
const int N=1e3+5;
const ll maxn=1e6+5;
const int dir[4][2]= {-1,0,1,0,0,-1,0,1};
set<int>st1,st2,st3;
set<int>ans1,ans;
int main()
{
//fre;
int T,cas=0 ;
int a,b,c;
scanf("%d",&T);
while(T--)
{
int x;
scanf(" %d %d %d",&a,&b,&c);
while(a--) scanf("%d",&x),st1.insert(x);
while(b--) scanf("%d",&x),st2.insert(x);
while(c--) scanf("%d",&x),st3.insert(x);
set_intersection(st1.begin(),st1.end(),st2.begin(),st2.end(),inserter(ans1,ans1.begin()));
set_intersection(ans1.begin(),ans1.end(),st3.begin(),st3.end(),inserter(ans,ans.begin()));
int sz=ans.size();
printf("case #%d:\n",cas++);
// printf("sz=%d\n",sz);
if(!sz) cout<<-1;
else
{
set<int>::iterator it=ans.begin();
bool flag=1;
while(it!=ans.end())
{
if(flag) flag=0;
else cout<<" ";
cout<<(*it),it++;
}
}
puts("");
st1.clear(),st2.clear(),st3.clear();
ans.clear(),ans1.clear();
}
return 0;
}