newcoder 求交集

 
鏈接:https://www.nowcoder.net/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 <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
#define f(i,l,r) for(int i=l;i<=r;++i)
#define g(i,l,r) for(int i=l;i>=r;--i)
const int N = 1000001;
typedef long long ll;
ll a[N],b[N],c[N];
int n,m;
int main() 
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
 
	while(cin>>n>>m)
	{
		memset(a,0,sizeof(a)/sizeof(a[0]));
		memset(b,0,sizeof(b)/sizeof(b[0]));
		memset(c,0,sizeof(c)/sizeof(c[0]));
		f(i,1,n)cin>>a[i];
		f(i,1,m)cin>>b[i];
		int h=1,j=1,k=1;
		h=1;

		while(h<=n&&j<=m){
			if(a[h]==b[j])
			{
				c[k++]=a[h];
				h++;j++;
			}
			else if(a[h] > b[j])j++;
			else h++;
		}
        if(k==1){
			cout<<"empty"<<endl;
			continue;
		}
 		f(i,1,k-2)cout<<c[i]<<" ";
		cout<<c[k-1]; 
        
	} 
	return 0;

}
未來的我一定會感謝正在努力的現在的我!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章