鏈接: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; }未來的我一定會感謝正在努力的現在的我!