文章目录
#10034. 「一本通 2.1 例 2」图书管理
代码
#include "stdio.h"
#include "string.h"
const int mod1 = 1e6 + 3, mod2 = 1e6 + 9, p1 = 47, p2 = 79, N = 30009;
int book[N], a[mod2 + 8], b[mod2 + 8];
int shu = 0;
void lianbiao(int x, int y) {
book[++shu] = a[x]; //book[++shu]=a[x]上一个标记值
a[x] = shu;
b[shu] = y; //有且只有一个(很重要)
}
int find(int x, int y) {
for (int i = a[x]; i != 0 ; i = book[i]) {
if (b[i] == y)
return 1;
}
return 0;
}
int main() {
int n, i, j;
scanf("%d", &n);
char c[10], cc[1000];
while (n--) {
scanf("%s", c);
gets(cc);
int x = 0, y = 0;
for (i = 0; i < strlen(cc); i++) {
//x,y双哈希思想,两关键字决定一个字符,减小误差
x = (x * p1 + cc[i]) % mod1;
y = (y * p2 + cc[i]) % mod2;
}
if (c[0] == 'a')
lianbiao(x, y);
else {
if (find(x, y))
printf("yes\n");
else
printf("no\n");
}
}
}
#10035. 「一本通 2.1 练习 1」Power Strings
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[1000005];
int nxt[1000005],l;
void getnext()
{
int k=-1