uva12338

来源:互联网 发布:美国eia数据是什么 编辑:程序博客网 时间:2024/06/06 20:56

裸题??。。。【hash还是学的不大好。。。。

给N个字符串,再给两个数i,。判断i和j的一样的长度是多少。。【被提醒用vector开动态数组

#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;unsigned long long b=100000007;const int maxn=100010;vector <unsigned long long> hashcode[maxn];int strhash[maxn];char str[maxn];void gethash(int pos){    int len=strlen(str);    strhash[pos]=len;    hashcode[pos].clear();    hashcode[pos].push_back(0);    for(int i=1;i<=len;i++)        hashcode[pos].push_back(hashcode[pos][i-1]*b+str[i-1]);}int main(){    int T,N,Q,a,b,l,r,mid;    scanf("%d",&T);    for(int i=1;i<=T;i++)    {        printf("Case %d:\n",i);        scanf("%d",&N);        for(int j=1;j<=N;j++)        {            scanf("%s",str);            gethash(j);        }        scanf("%d",&Q);        for(int j=1;j<=Q;j++)        {            scanf("%d%d",&a,&b);            int len=min(strhash[a],strhash[b]);            l=0;r=len;            while(l<r)            {                mid=(l+r+1)/2;                if(hashcode[a][mid]==hashcode[b][mid])                    l=mid;                else                    r=mid-1;            }            printf("%d\n",l);        }    }}


0 0