Oulipo HDU - 1686(字符串hash)

题意

给你字符A,B问你B中的A有几个

思路

字符串hash,将A的hash值求出,遍历B的每个点判断hash值是否与A相等

#include 
#include 
#include 
#include 

using namespace std;

typedef unsigned long long ull;
const int seed=13331;
const int MAXN=1e6+10;


char str1[MAXN],str2[MAXN];
ull xp[MAXN],hash_1[MAXN],hash_2[MAXN];

void init()
{
    xp[0]=1;
    for(int i=1;i=0;i--)
        hash[i]=hash[i+1]*seed+str[i]-'a'+1;
}

int main()
{
    init();
    int T;cin>>T;
    while(T--)
    {
        scanf("%s%s",str1,str2);
        make_hash(str1,hash_1);
        make_hash(str2,hash_2);
        int len1=strlen(str1);
        int len2=strlen(str2);
        ull ans1=get_hash(0,len1,hash_1);
        int cont=0;
        for(int i=0;ilen2) break;
            ull ans2=get_hash(i,len1,hash_2);
            if(ans2==ans1) cont++;
        }
        printf("%d\n",cont);
    }
    return 0;
}

 

你可能感兴趣的:(字符串/hash)