以前写的板子怎么T了
查看原帖
以前写的板子怎么T了
326254
LonginusMonkey楼主2024/9/9 23:05
#include<bits/stdc++.h>
using namespace std;
char ch1[1140514], ch2[1104514];
int kmp[1145104];
int main() {
ios::sync_with_stdio(0); cin.tie(0);
	cin >> ch1+1 >> ch2+1;
	int j = 0;
	for(int i=2; i<=strlen(ch2+1); ++i) {
		while(j && ch2[i] != ch2[j+1]) {
			j = kmp[j];
		}
		if(ch2[i] == ch2[j+1]) {
			j++;
		}
		kmp[i] = j;
	}
	j = 0;
	int len2 = strlen(ch2+1);
	int len1 = strlen(ch1+1);
	for(int i=1; i<=len1; ++i) {
		while(j && ch1[i] != ch2[j+1]) {
			j = kmp[j];
		}
		if(ch2[j+1] == ch1[i]) {
			j++;
		}
		if(j  == len2) {
			cout << i - len2 +1 << "\n";
			j = kmp[j];
		}
	}
//	cout << endl;
	for(int i=1; i<=strlen(ch2+1); ++i) {
		cout << kmp[i] << " ";
	}
	return 0;
}
2024/9/9 23:05
加载中...