萌新求助 用char数组tle 用string re 本地正常
查看原帖
萌新求助 用char数组tle 用string re 本地正常
59285
封禁用户楼主2020/10/17 21:21
#include<cstring>
#include<iostream>
using namespace std;

char s1[2145141];
char s2[2145141];
int nxt[2145141];
int ans[2145141];
int sum;
int l1,l2;

void getnxt()
{
  int now=0;
  int s=1;
  while(s<l2)
   {
   	 if(s2[s]==s2[now])
   	  {
   	  	nxt[s]=nxt[s-1]+1;
   	  	now++;
   	  	s++;
	  }
	 else if(now)
	  now=nxt[now-1];
	 else
	  {
	  	nxt[s]=0;
	  	s++;
	  }  
   }
  
  	
}

int fd()
{
	int p=0;
	int s=0;
	while(p<l1)
	 {
	 	if(s1[p]==s2[s])
	 	 {
	 	   p++;
	 	   s++;
		 }
		else if(s)
		 {
		   	s=nxt[s-1];
		 }
		else p++;  
	 	
	 	if(s==l2)
	 	 {
	 	   ans[++sum]=p-s;
	 	   s=nxt[s-1];
		 }
	 }
	
	
}

int main()
{
	cin>>s1>>s2;
	l1=strlen(s1);
	l2=strlen(s2);
	getnxt();
	fd();
	for(int i=1;i<=sum;i++)
	 cout<<ans[i]+1<<endl;
	for(int i=0;i<l2;i++)
	 cout<<nxt[i]<<' '; 
	
	
	return 0;
}

后面试了下char配scanf 结果re了
人晕了
但本地跑和在线ide没任何问题
2020/10/17 21:21
加载中...