洛谷 P3370 【模板】字符串哈希

同学问这道题的做法,然后随便就……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;

int n;

struct node
{
    int sum,next;
    string s;
};

node edge[10005];
int head[1000],sum=0;

int hash(string sum)
{
    int l=0;
    int r=sum.size()-1;
    int m=(l+r)/2;
    return int(sum[l]+sum[r]+sum[m]);
}

void push(string s)
{
    int v=hash(s);
    for(int i=head[v];i!=-1;i=edge[i].next)
        if(edge[i].s==s)
            return;
    edge[++sum].sum=v;
    edge[sum].s=s;
    edge[sum].next=head[v];
    head[v]=sum;
    return;
}

int main()
{
    memset(head,-1,sizeof(head));
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        string sdf;
        cin>>sdf;
        push(sdf);
    }
    printf("%d",sum);
    return 0;
}

感觉hash函数并不需要很复杂……