链接:
https://www.nowcoder.net/acm/contest/76/C
来源:牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给你两个升序排列的集合,求出两个集合的交集。
输入描述:
有多个测试用例,输入到文件结束。 对于每一个测试用例: 第一行输入两个整数n,m(0<n,m<=1000000),分别代表第一个集合和第二个集合的元素的数量。 第二行输入n个整数,表示第一个集合中的元素,元素之间用空格隔开。 第三行输入m个整数,表示第二个集合中的元素,元素之间用空格隔开。 两个集合中的元素范围在[-1000000000,1000000000]区间内。
输出描述:
每个测试用例用一行来输出两个集合的交集的所有元素(元素用空格隔开且按升序排列),若交集为空则输出"empty"。
示例1
输入
2 3 1 3 1 2 3
输出
1 3
备注:
交集为空的情况下,输出"empty" 。
#include<cstring>
#include <iostream>
#include<algorithm>
#include<set>
using namespace std;
vector<int> ans;
int main(){
int n,m;
scanf("%d%d",&n,&m);
vector<int> v(n);
vector<int> s(m);
int x;
for(int i=0;i<n;i++){
scanf("%d",&x);
v[i]=x;
}
for(int i=0;i<m;i++){
scanf("%d",&x);
s[i]=x;
}
sort(v.begin(),v.end());
sort(s.begin(),s.end());
int i,j;
int ven=v.size();
int sen=s.size();
for(i=j=0;i<ven&&j<sen;){
if(v[i]==s[j]){
ans.push_back(v[i]);
i++;j++;
}else if(v[i]<s[j]){
i++;
}else{
j++;
}
}
int len=ans.size();
if(!len)puts("empty");
else{
for(i=0;i<len-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[i]);
}
return 0;
}