hash求调
  • 板块学术版
  • 楼主Furina_zbg
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/5 14:43
  • 上次更新2023/12/5 18:25:59
查看原帖
hash求调
534953
Furina_zbg楼主2023/12/5 14:43

[例题1]Oulipo

题目

给出两个字符串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题,我太废物了!

2023/12/5 14:43
加载中...