HASH 题目汇总 转载自hqd

    技术2022-05-19  24

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

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

    poj2875 poj1840 poj3640 poj3349

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

    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  典型hash1482  中途用到hash思想1496  经典hash2141  经典hash加强版

     

    本文来自博客,转载请标明出处:http://blog.csdn.net/hqd_acm/archive/2010/09/23/5902081.aspx

     

     


    最新回复(0)