题目
给出两个字符串s1,s2 ((只有大写字母),求s1 在s2 中出现多少次。
例如:s1="ABA" ,s2="ABAABA" ,答案为2 。
、
、
大佬帮忙调一下程序,不知道错哪了
样例是过了的
#include<bits/stdc++.h>
using namespace std;
unsigned long long T, i, x, ans, y, n, k, m;
char a[10010], b[1000010];
int main () {
scanf("%llu", &T);
while(T--) {
scanf("%s %s", a + 1, b + 1);
n = strlen(a + 1); m = strlen(b + 1);
x = 0; k = 1; ans = 0;
for (i = 1; i <= n; ++i)
x = x * 29 + a[i] - 'A' + 1, k *= 29;
k /= 29;
y = 0;
for (i = 1; i < n; ++i)
y = y * 29 + b[i] - 'A' + 1;
for (i = n; i <= m; ++i) {
y = y * 29 + b[i] - 'A' + 1;
if(x == y) ++ans;
y = y - (b[i - n + 1] - 'A' + 1) * k;
}
printf("%llu\n", ans);
}
}
一道很水的hash题,我太废物了!