rt,歪解跑得比题解(@Vocalise)还快,均开了 O2 .
题解:(597ms)
#include<cstdio>
#include<iostream>
const int p=100007,q=10009,pq=100001;
int n,Hash[pq+1];
inline int hash(const int &x){
return ((x%p)*(x%q))%pq;
}
int main(){
std::cin>>n;
for(register int i=1,a;i<=n;i++){
std::scanf("%d",&a);
if(++Hash[hash(a)]>(n>>1)){
std::printf("%d\n",a);
return 0;
}
}
}
本人写的歪解:(111ms)
//P2397 yyy loves Maths VI (mode)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 1e4+7;
int num[N];
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch > '9' || ch < '0') {
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x*f;
}
int main() {
int n = read();
map<int, int> num;
for (int i = 1; i <= n; ++i) {
int tmp = read();
num[tmp%N] ++;
if (num[tmp%N] >= n/8) { //甚至写成1/8都能过
cout << tmp << endl;
return 0;
}
}
return 0;
}