QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#819727#2840. 绿绿与串串MirasycleTL 2ms13784kbC++141.0kb2024-12-18 17:15:262024-12-18 17:15:29

Judging History

你现在查看的是最新测评结果

  • [2024-12-18 17:15:29]
  • 评测
  • 测评结果:TL
  • 用时:2ms
  • 内存:13784kb
  • [2024-12-18 17:15:26]
  • 提交

answer

#include<bits/stdc++.h>
#define pb emplace_back
#define fi first
#define se second
#define mp make_pair
using namespace std;
typedef long long ll;
const int maxn=2e6+10;
void chkmax(int &x,int y){ x=x>y?x:y; }
void chkmin(int &x,int y){ x=x<y?x:y; }
char s[maxn]; int n,m=0; int ans[maxn];
int r[maxn],vis[maxn],len[maxn]; char t[maxn];
void solve(){
	cin>>(s+1); n=strlen(s+1);
	if(n==1){ cout<<1<<endl; return ; }
	t[m=0]='#'; t[++m]='@';
	for(int i=1;i<=n;i++) t[++m]=s[i],t[++m]='@'; t[++m]='!';
	for(int i=1,R=0,c=0;i<m;i++){
		r[i]=i>R?1:min(r[2*c-i],R-i+1);
		while(t[i-r[i]]==t[i+r[i]]&&r[i]<m) r[i]++;
	}
	for(int i=1;i<=n;i++){ vis[i]=0; len[i]=r[i<<1]/2; }
	vis[n+1]=1; ans[0]=0;
	for(int i=n;i>=2;i--){
		if(i+len[i]-1==n) ans[++ans[0]]=i,vis[i]=1; 
		else if(i==len[i]&&vis[i+len[i]-1]) ans[++ans[0]]=i;
	}
	for(int i=ans[0];i>=1;i--) cout<<ans[i]<<" "; cout<<endl;
}
int main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int T; cin>>T;
	while(T--) solve(); 
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 13784kb

input:

7
abcdcb
qwqwq
qaqaqqq
carnation
c
ab
aa

output:

4 6 
2 3 4 5 
6 7 
9 
1
2 
2 

result:

ok 7 lines

Test #2:

score: -100
Time Limit Exceeded

input:

5
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc...

output:


result: