1456 图书管理
很明显,这是一个字符串hash的题
还有就是说,这里会运用一个类似于邻接表的方式来存储一下每一个字符串,满足插入的操作
感觉HASH不难,就是在确定进制和模数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char op[10];
char book[400];
int n;
const int mod1=1e6+3,mod2=1e6+9,p1=71,p2=79,N=30005;
int tot=0,nxt[N],end[N],poi[mod1+5];
void insert(int x,int y)
{
nxt[++tot]=poi[x];
poi[x]=tot;
end[tot]=y;
}
void find(int x,int y)
{
for( register int i=poi[x];i;i=nxt[i])
{
if(end[i]==y)
{
printf("yes\n");
return;
}
}
printf("no\n");
return;
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%s",op);
gets(book);
int l=strlen(book);
int s1=0,s2=0;
for(register int i=0 ;i<l;i++)
{
s1=(s1*p1+book[i])%mod1;
s2=(s2*p2+book[i])%mod2;//字符串转化数字
}
if(op[0]=='a')
{
insert(s1,s2);
}
else
{
find(s1,s2);
}
}
return 0;
}