PAT A1029

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-17 03:31   11   0

方法:用双指针的方法逐个比较,更高效的方法可以用类似二分的方法进行比较。此外,直接排序也能通过。

注意点:两个数组最后需要添加一个无穷大的数,避免一个数组的多数值大于另一个数组的所有值。

#include <iostream>
const int maxn=200010;
const int INF=2000000000;
int s1[maxn],s2[maxn];
int main(){
 int num1,num2;
 scanf("%d",&num1);
 for(int i=0;i<num1;i++)
  scanf("%d",&s1[i]);
 scanf("%d",&num2);
 for(int i=0;i<num2;i++)
  scanf("%d",&s2[i]);
 s1[num1]=s2[num2]=INF;
 for(int i=0,j=0;i<=num1&&j<=num2;){
  if(s1[i]<s2[j]){
   if(i+j+1==(num1+num2+1)/2){
    printf("%d",s1[i]);
    break;
   }
   i++;
  }else{
   if(i+j+1==(num1+num2+1)/2){
    printf("%d",s2[j]);
    break;
   }
   j++;
  }
 }
 return 0;
}

也可直接排序:

#include <iostream>
#include <algorithm>
using namespace std;
long long a[2000010];
int main(){
 int pos=0,num1,num2;
 scanf("%d",&num1,&num2);
 for(;pos<num1;pos++)
  scanf("%lld",&a[pos]);
 scanf("%d",&num2);
 num2+=num1;
 for(;pos<num2;pos++)
  scanf("%lld",&a[pos]);
 sort(a,a+num2);
 printf("%lld",a[(num2-1)/2]);
 return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP