链接:https://www.nowcoder.com/acm/contest/76/C
来源:牛客网
给你两个升序排列的集合,求出两个集合的交集。
输入描述:
有多个测试用例,输入到文件结束。
对于每一个测试用例:
第一行输入两个整数n,m(0<n,m<=1000000),分别代表第一个集合和第二个集合的元素的数量。
第二行输入n个整数,表示第一个集合中的元素,元素之间用空格隔开。
第三行输入m个整数,表示第二个集合中的元素,元素之间用空格隔开。
两个集合中的元素范围在[-1000000000,1000000000]区间内。
输出描述:
每个测试用例用一行来输出两个集合的交集的所有元素(元素用空格隔开且按升序排列),若交集为空则输出"empty"。
示例1
输入
2 3
1 3
1 2 3
输出
1 3
备注:
交集为空的情况下,输出"empty"
。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int N = 1e6 + 10;
int n,m,a[N],b[N],c[N];
int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<m;i++) scanf("%d",&b[i]);
int p1 = 0, p2 = 0, p = 0;
while(p1<n&&p2<m){
if(a[p1]<b[p2]) p1++;
else if(a[p1]>b[p2]) p2++;
else{
if(p==0||a[p1]!=c[p-1]) c[p++] = a[p1];
p1++; p2++;
}
}
for(int i=0;i<p;i++) printf("%d%c",c[i],i==p-1?'\n':' ');
if(p==0) printf("empty\n");
}
return 0;
}