题意是找众数(每个数少于30位)用int存超界也能找众数,哈希做比较好些;
//普通找众数附个
#include<stdio.h>
int main()
{
int n,i,sum,Max;
int a[3005];
while(scanf("%d",&n)!=EOF)
{
if(n==0){printf("0\n");continue;}
Max=0;
for(i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
sum=0;
for(i=0;i<n-1;i++)
{
if(a[i]==a[i+1]) sum++;
else sum=0;
if(sum>Max) Max=sum;//每次都更新值
}
printf("%d\n",Max+1);
}
return 0;
}
//普通找众数再附
#include<stdio.h>
int a[3010];
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
int i=0,j,maxn=0;
for(;i<n;)
{
int num=1;
for(j=i+1;j<n;j++)
if(a[i]==a[j]) num++;
else break;
i=j;
if(num>maxn) maxn=num;
}
printf("%d\n",maxn);
}
return 0;
}
//哈希做
#include<cstdio>
#include<algorithm>
using namespace std;
char s[50];
const int MOD = 10000007;
const int seed[2] = {13, 37};
int Hash() //找的。。对自己无语。。
{
int res = 0;
int i;
for(i = 0; s[i] == '0'; i++){}
for(; s[i] != '\0'; i++)
{
res += ((res * seed[s[i]&1] + s[i]) % MOD);
}
return res;
}
int a[3100];
int main(){
int n;
while(~scanf("%d",&n)){
for(int k=0;k<n;k++){scanf("%s",s);a[k]=Hash();}
sort(a,a+n);
int i=0,j,maxn=0;
while(i<n)
{
int num=1;
for(j=i+1;j<n;j++)
if(a[i]==a[j]) num++;
else break;
i=j;
if(num>maxn) maxn=num;
}
printf("%d\n",maxn);
}
return 0;
}