UVA 188 Perfect Hash

UVA_188

    这个题目的难度主要在理解题意上面,理解了题意之后只要按题意进行模拟并找出C即可。

#include<stdio.h>
#include
<string.h>
#include
<ctype.h>
int head[30],next[30];
int st[30],w[30],n,C;
char b[200],temp[30];
int min(int x,int y)
{
return x<y?x:y;
}
int make()
{
int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if((C/w[i])%n==(C/w[j])%n)
{
C
=min((C/w[i]+1)*w[i],(C/w[j]+1)*w[j]);
return 0;
}
return 1;
}
int main()
{
int i,j,k,p;
while(gets(b)!=NULL)
{
n
=0;
memset(w,
0,sizeof(w));
k
=strlen(b);
for(i=0;i<k;i++)
if(isalpha(b[i]))
{
sscanf(
&b[i],"%s",temp);
p
=strlen(temp);
i
+=p;
for(j=0;j<p;j++)
w[n]
=(w[n]<<5)+(temp[j]-'a'+1);
n
++;
}
C
=1<<31-1;
for(i=0;i<n;i++)
if(w[i]<C)
C
=w[i];
while(!make());
printf(
"%s\n",b);
printf(
"%d\n",C);
printf(
"\n");
}
return 0;
}

  

你可能感兴趣的:(hash)