luogu#P3370 字符串哈希

题意:

​ 给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,),请求出N个字符串中共有多少个不同的字符串。

解法:

​ 哈希

单哈希会无法通过 据说可以用一个很大的质数通过
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int kh=233;
struct node{int q,w;}ans[10005];
bool cmp(const node& x,const node& y){return x.q<y.q;}
string a;
int n;

inline int hsh(string x,int h);
int main()
{
    int cnt=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        ans[i].q=hsh(a,19260817);
        ans[i].w=hsh(a,19260813);
    }
    sort(ans+1,ans+n+1,cmp);
    for(int i=1;i<=n;i++)
        if(ans[i].q!=ans[i+1].q||ans[i].w!=ans[i+1].w)
            cnt++;
    cout<<cnt;
    return 0;
}
inline int hsh(string x,int h)
{
    int re=0;
    for(int i=0;i<x.size();i++)
        re=(re*kh+x[i])%h;
    return re%h;
}

猜你喜欢

转载自www.cnblogs.com/nenT/p/11644530.html