hdu 1029(hash)

 

传送门:Ignatius and the Princess IV

题意:给n个数,找出出现次数大于等于(n+1)/2的那个数。

分析:大水题,排个序输出中间那个即可,这里随便写个HASHMAP找出次数最大那个。

#include <algorithm>

#include <cstdio>

#include <cstring>

#define N 1000010

#define inf 0x3f3f3f3f

using namespace std;

const int HASH=1000007;

const int MAXN=1000010;

struct HASHMAP

{

    int head[HASH],next[MAXN],size;

    int state[MAXN],num[MAXN];

    void init()

    {

        size=0;

        memset(head,-1,sizeof(head));

        memset(num,0,sizeof(num));

    }

    int insert(int val)

    {

        int h=(val%HASH+HASH)%HASH;

        for(int i=head[h];~i;i=next[i])

        {

            if(val==state[i])

            {

                num[i]++;

                return num[i];

            }

        }

        state[size]=val;

        num[size]=1;

        next[size]=head[h];

        head[h]=size++;

        return 1;

    }

}H;

int main()

{

    int n,x;

    while(scanf("%d",&n)>0)

    {

        H.init();

        int mx=0,ans=0;

        for(int i=1;i<=n;i++)

        {

            scanf("%d",&x);

            int res=H.insert(x);

            if(res>mx)

            {

                ans=x;mx=res;

            }

        }

        printf("%d\n",ans);

    }

}
View Code

 

你可能感兴趣的:(hash)