B
朴素的中位数
时间限制:1000ms 内存限制:65536kb
通过率:62/80 (77.50%)
正确率:62/354 (17.51%)
解析:
将两个有序数组归并,分奇偶求出中位数即可,不过要注意:两个数组均使用long long数据类型,总数为偶数求解中位数时,要将数组中间两个数强制转化为double类型再计算才能避免出错。
代码:
#include<cstdio> #include<algorithm> #include<iostream> long long num_1[1000007],num_2[1000007]; long long num[2000007]; using namespace std; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { if(!n&&!m) { printf("0.0\n"); continue; } for(int i = 0;i < n;i++) { scanf("%lld",&num_1[i]); } for(int i = 0;i < m;i++) { scanf("%lld",&num_2[i]); } int i = 0,j = 0,k = 0; while(i < n && j < m) { if(num_1[i] <= num_2[j]) { num[k++] = num_1[i++]; } else { num[k++] = num_2[j++]; } } while(i < n) { num[k++] = num_1[i++]; } while(j < m) { num[k++] = num_2[j++]; } int sum = n+m; if(sum % 2 == 0) { double mid = ((double)num[sum/2] + (double)num[sum/2-1])/2; printf("%.1lf\n",mid); } else { double mid = num[(sum+1)/2-1]; printf("%.1lf\n",mid); } } }