hdu_1800 Flying to the Mars

题意是找众数(每个数少于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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值