求助
查看原帖
求助
122235
Qwdb楼主2023/7/6 12:36

自己rand了几百组全对,大概是输入输出格式问题?

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string data;
int p[2*N];
char s[2*N];
int main()
{
	while(cin>>data)
	{
		memset(p,0,sizeof(p));
		memset(s,0,sizeof(s));
		int len=data.size();
		s[0]='~';
		s[1]='#';
		for(int i=0;i<len;i++)
		{
			s[i*2+2]=data[i];
			s[i*2+3]='#'; 
		}
		len=len*2+2;
		for(int i=1,r=0,mid=0;i<len;i++)
		{
			if(i<r)
			{
				p[i]=min(p[(mid*2)-i],r-i);
			}
			while(s[i-p[i]]==s[i+p[i]])
			{
				p[i]++;
			}
			if(i+p[i]>r)
			{
				r=i+p[i];
				mid=i;
			}
		}
		for(int i=1;i<len;i++)
		{
			p[i]--;
		}
		if(p[(len)/2]+(len)/2>=len-1)
		{
			cout<<data<<endl;
		}
		else
		{
			int al=N;
			int ans;
			for(int i=len-1;i>=1;i--)
			{
				if(i+p[i]==len-1)
				{
					if(i-p[i]-1<al)
					{
						al=i-p[i]-1;
						ans=(i-p[i]-1)/2-1;
					}
				}
			}
			cout<<data; 
			for(int i=ans;i>=0;i--)
			{
				cout<<data[i];
			}
			cout<<endl;
		}
		data="";
	}
	return 0;	
} 
2023/7/6 12:36
加载中...