第一次尝试,将二维数组展开成一维,装入后排序,然后遍历 i 与 i 后 i + M*N/2 是否相同,相同即为结果。但是有个测试点运行超时。
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int N, M;
cin >> M >> N;
int rec[M*N];
for(int i = 0; i < M*N; i++) cin >> rec[i];
sort(rec, rec+M*N);
if(M == 1 && N == 1){
cout << rec[0]; return 0;
}
for(int i = 0; i < M*N / 2; i++){
if(rec[i] == rec[i + M*N/2])
cout << rec[i];
}
return 0;
}
然后换了方法,使用map记录,但还是超时了,发现是cin 的问题,改成scanf就过了。
#include <iostream>
#include <map>
using namespace std;
int main(){
int N, M, temp;
scanf("%d %d", &M, &N);
map<int, int> ans;
for(int i = 0; i < M; i++){
for(int j = 0; j < N; j++){
scanf("%d", &temp);
ans[temp]++;
if(ans[temp] > M*N / 2)
cout << temp;
}
}
return 0;
}