洛谷 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函数并不需要很复杂……

 

posted @ 2017-05-23 16:57  Grary  阅读(122)  评论(0编辑  收藏  举报
博客园 首页 私信博主 编辑 关注 管理 新世界