1029 Median (25分)
思路:
参考的柳神代码
一定要用scanf,否则最后一个点超时
代码:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int main() {
int n, m, t;
int num[200005];
cin >> n;
for (int i = 0; i < n; i++) {
scanf("%d", &t);
num[i]=t;
}
cin >> m;
int mid = (n + m - 1) / 2;
int cnt = 0, k = 0;
for (int i = 0; i < m; i++) {
scanf("%d", &t);
while(k < n&&num[k]<t){
if (cnt == mid) {
cout << num[k];
return 0;
}
cnt++;
k++;
}
if (cnt == mid) {
cout << t;
return 0;
}
cnt++;
}
while (k < n) {
cnt++;
k++;
if (cnt == mid) {
cout << num[k];
return 0;
}
}
return 0;
}
另外直接合并排序也能AC…当然必须用scanf才不会超时。
代码:
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector<int> num;
int n, m, t;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &t);
num.push_back(t);
}
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &t);
num.push_back(t);
}
sort(num.begin(), num.end());
printf("%d", num[(n + m - 1) / 2]);
return 0;
}