HASH 题目汇总

挺喜欢hash,可能是因为hash的运用比较灵活吧。现在对就对ac的几个题做个分类。

大整数的hash,含多个整数(这类题的hash函数比较灵活)

poj2875 poj1840 poj3640 poj3349

poj2002    key=(abs(p[i].x)*99983+abs(p[i].y)*13)%77777;

poj1200 (将字符串看成26进制数)

字符串的hash(有许多现成函数,选择合适的就行)

poj 2503

int ELFhash(char *key)             

{

    unsigned long h=0;

    while(*key)

    {

        h=(h<<4)+*key++;

        unsigned long g=h&0Xf0000000L;

        if(g) h^=g>>24;

        h&=~g;

    }

    return h%MOD;

}

数组的hash(有现成函数)

poj3274

int getkey(int *v,int k)

{

       int i,p=0;

       for(i=1; i<k; i++)

              p=((p<<2)+(v[i]>>4))^(v[i]<<10);

       p = p%prime;

       if(p<0)    p=p+prime;

       return p;

}

全排列的hash (没有冲突的hash,利用全排列与逆序数列一一对应的原理)

poj1077

int getkey(int *seq)

{

       int i,j,cnt,key=0;

       for(i=0;i<9;i++)

       {

              cnt=0;

              for(j=0;j<i;j++)          

                     if(seq[j]>seq[i])

                            cnt++;

              key+=cnt*fac[i];       // cnt<=i

       }

       return key;

}

HDU 

hash一般用在搜索中用于判重
单纯考察hash的题目不多,
有些需要处理冲突
1904  最普通的
1800  需要处理冲突
1755  典型hash
1482  中途用到hash思想
1496  经典hash
2141  经典hash加强版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值