1 条题解
-
0
C :
#include <stdio.h> int main() { while(1) { long n1; long n2; long A[1000000]; long B[1000000]; if(scanf("%ld",&n1)==EOF) { break; } for(int i=0;i<n1;i++) { scanf("%ld",&A[i]); } scanf("%ld",&n2); for(int i=0;i<n2;i++) { scanf("%ld",&B[i]); } long min=(n1+n2)/2; if((n1+n2)%2!=0) { min=min+1; } long count=0; long ap=0; long bp=0; int flag=0; while(count<min&&ap<n1&&bp<n2) { while(flag==0&&ap<n1&&bp<n2&&A[ap]<B[bp]) { count++; if(count>=min) { flag=1; break; } ap++; } while(flag==0&&ap<n1&&bp<n2&&A[ap]>=B[bp]) { count++; if(count>=min) { flag=2; break; } bp++; } } if(ap<n1&&count<min) { ap--; while(count<min) { ap++; count++; flag=1; } } if(bp<n2&&count<min) { bp--; while(count<min) { bp++; count++; flag=2; } } if(flag==1) { printf("%ld\n",A[ap]); } if(flag==2) { printf("%ld\n",B[bp]); } } }
C++ :
#include <stdio.h> int a[1100000], b[1100000]; // 定义储存两列序列的数组,由于元素很多,所以使用全局变量来存储 int main(){ int m; // 第一个序列的元素数目 while(scanf("%d", &m) != EOF){ for(int i=0;i<m;i++){ // 读入第一个序列中的元素 scanf("%d", &a[i]); } int n; // 第二个序列中的元素数目 scanf("%d", &n); for(int i=0;i<n;i++){ // 读入第二个序列中的元素 scanf("%d", &b[i]); } int t = (m+n-1)/2; // 在总的序列中中间的那个数前面有多少元素 int i=0, j=0; while(t--){ // 定位到中间的那个数 if(a[i]<b[j] && i<m || j>=n){ i++; }else{ j++; } } printf("%d\n",a[i]<b[j] && i<m ? a[i] : b[j]); // 输出结果 } return 0; }
- 1
信息
- ID
- 1681
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者