赋值问题
查看原帖
赋值问题
776337
sugawara楼主2024/7/9 14:24

下两代码中均有

n=strlen(p+1);

这一语句,但在最后输出的时候

for(int i=1;i<=n;i++)

与

for(int i=1;i<=strlrn(p+1);i++)

输出效果是时间上的差异

代码1(subtask3TLE)

#include<iostream>
#include<string.h>
using namespace std;
const int mx=1e6+10;
char t[mx],p[mx];
int nxt[mx],n,m;
int main() {
	scanf("%s%s",t+1,p+1);
	n=strlen(p+1), m=strlen(t+1);
	nxt[1]=0;
	for(int i=2,k=0;i<=n;i++){
		while(k&&p[i]!=p[k+1]) k=nxt[k]; 
		if(p[i]==p[k+1]) k++;
		nxt[i]=k;
	}
	for(int i=1,k=0;i<=m;i++){
		while(k&&t[i]!=p[k+1]) k=nxt[k];
		if(t[i]==p[k+1]) k++;
		if(k==n) printf("%d\n",i-k+1), k=nxt[k];
	}
	for(int i=1;i<=strlen(p+1);i++)printf("%d ",nxt[i]);
	return 0;
}

code 2(AC)

#include<iostream>
#include<string.h>
using namespace std;
const int mx=1e6+10;
char t[mx],p[mx];
int nxt[mx],n,m;
int main() {
	scanf("%s%s",t+1,p+1);
	n=strlen(p+1), m=strlen(t+1);
	nxt[1]=0;
	for(int i=2,k=0;i<=n;i++){
		while(k&&p[i]!=p[k+1]) k=nxt[k]; 
		if(p[i]==p[k+1]) k++;
		nxt[i]=k;
	}
	for(int i=1,k=0;i<=m;i++){
		while(k&&t[i]!=p[k+1]) k=nxt[k];
		if(t[i]==p[k+1]) k++;
		if(k==n) printf("%d\n",i-k+1), k=nxt[k];
	}
	for(int i=1;i<=n;i++)printf("%d ",nxt[i]);
	return 0;
}
2024/7/9 14:24
加载中...