{A} + {B} 分类: HDU 2015-07-11 18:06 6人阅读 评论(0) 收藏
{A} + {B}
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14601 Accepted Submission(s): 6099
Problem Description
给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.
注:同一个集合中不会有两个相同的元素.
Input
每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
Output
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
Sample Input
1 2 1 2 3 1 2 1 1 2
Sample Output
1 2 3 1 2#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int Max=11000; int a[Max]; int b[Max]; bool flag; void Output(int n) { if(flag) printf(" "); else { flag=true; } printf("%d",n); } int main() { int n,m; while(~scanf("%d %d",&n,&m)) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<m;i++) { scanf("%d",&b[i]); } sort(a,a+n); sort(b,b+m); int i=0,j=0; flag=false; while(i<n&&j<n) { while(i<n&&j<m&&a[i]<=b[j]) { Output(a[i]); if(a[i]==b[j]) { j++; } i++; } while(i<n&&j<m&&b[j]<=a[i]) { Output(b[j]); if(a[i]==b[j]) { i++; } j++; } } while(i<n) { Output(a[i]); i++; } while(j<m) { Output(b[j]); j++; } cout<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。