蒟蒻求助,悬赏关注!(自信)
查看原帖
蒟蒻求助,悬赏关注!(自信)
601245
I_am_zhima楼主2023/7/26 21:32
#include<bits/stdc++.h>
using namespace std;
#define re register
#define int long long
const int N=1e6+5;

int T;

bool vis[N<<1];
int n,cnt,p[N<<1];
char c[N],s[N<<1];

signed main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	
	cin>>T;
	while(T--){
		memset(p,0,sizeof(p)),memset(vis,0,sizeof(vis));
	    cin>>c+1;n=strlen(c+1);
		
		s[0]='-',s[cnt=1]='#';
		for(re int i=1;i<=n;i++)
			s[++cnt]=c[i],s[++cnt]='#';
		
		for(re int i=1,mid=0,maxr=0;i<=cnt;i++){
			if(i<=maxr)
				p[i]=min(p[(mid<<1)-i],maxr-i+1);
			while(s[i-p[i]]==s[i+p[i]])
				p[i]++;
			if(i+p[i]>maxr)
				mid=i,maxr=i+p[i]-1;
		}
		
		for(re int i=cnt;i>=1;i--){
			if(i+p[i]-1==cnt)
				vis[i]=1;
			else if(vis[i+p[i]-2]==1&&i==p[i])
				vis[i]=1;
		}
		for(re int i=1;i<=cnt;i++)
			if(s[i]>='a'&&s[i]<='z'&&vis[i])
				cout<<i/2<<" ";
		cout<<"\n";
	}
	
	return 0;
}
/*
1
xqaqaq
*/
2023/7/26 21:32
加载中...