POJ 2503 Babelfish

来源:互联网 发布:数控车床圆锥编程 编辑:程序博客网 时间:2024/05/20 07:16

水题,鉴于是第一过了的hash,还是记录下... 想用SET来着,可是不熟,同时记录下标和哈希值不会用... ...自己sort加二分查找过的。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<set>using namespace std;const int N=999983;const int hash1=131;char a[100005][20];int len;struct word{    int hv;    int idx;}w[100005];int Hash(char *s){    int ret=0;    for(int i=0;s[i]!='\0';i++)    {        ret=ret*hash1+s[i];    }    return ret;}bool cmp(word x,word y){    return x.hv<y.hv;}int Find(int k){    int l=0,r=len-1,m;    m=(l+r)>>1;    while(w[m].hv!=k&&l<=r)    {        if(w[m].hv<k)        {            l=m+1;        }        if(w[m].hv>k)        {            r=m-1;        }        m=(l+r)>>1;    }    if(w[m].hv!=k)return -1;    else return w[m].idx;}char getstr[100];char word[100];int main(){    int i;    for(i=0;gets(getstr),getstr[0]!='\0';i++)    {        int j=0;        while(getstr[j]!=' ')        {            a[i][j]=getstr[j];            j++;        }        a[i][j]=getstr[j];        int k=Hash(getstr+j+1);        w[i].hv=k;        w[i].idx=i;    }    len=i;    sort(w,w+len,cmp);    while(gets(word))    {        int k=Hash(word);        int index=Find(k);        if(index==-1)printf("eh\n");        else printf("%s\n",a[index]);    }    return 0;}


原创粉丝点击