11和13TLE了
查看原帖
11和13TLE了
361342
┭┮﹏┭┮楼主2022/5/10 15:31
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
using namespace std;
char a[1000010],b[1000010];
int net[1000010];
void nex(){
	net[1] = 0;
	int i = 1,j = 0;
	while(i <= strlen(b+1)){
		if(j == 0 || b[i] == b[j])net[++i] = ++j;
		else j = net[j];
	}
}
int main(){
//	freopen("usaco_Jan_word.in","r",stdin);
//	freopen("usaco_Jan_word.out","w",stdout);
	scanf("%s%s",a+1,b+1);
	nex();
	int j = 1;
	for(int i = 1;i <= strlen(a+1);i++){
		while(j != 1 && a[i] != b[j])j = net[j];
		if(a[i] == b[j])j++;
		if(j == strlen(b+1)+1){
			printf("%d\n",i-j+2);
			j = net[j];
		}
	} 
	printf("0 ");
	for(int i = 2;i <= strlen(b+1);i++)printf("%d ",net[i+1]-1);
	printf("\n");
 
	return 0; 
} 
2022/5/10 15:31
加载中...