QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#819734 | #2840. 绿绿与串串 | Mirasycle | TL | 0ms | 13908kb | C++14 | 1.0kb | 2024-12-18 17:17:27 | 2024-12-18 17:17:27 |
Judging History
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]++;
}
if(n>=1e6) return ;
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;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 13908kb
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...