QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#816956#2840. 绿绿与串串yanshanjiahongTL 0ms3568kbC++141.5kb2024-12-16 19:26:322024-12-16 19:26:32

Judging History

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

  • [2024-12-16 19:26:32]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:3568kb
  • [2024-12-16 19:26:32]
  • 提交

answer

#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define repp(i,j,k) for(int i=j;i>=k;i--)
#define pii pair<int,int>
#define mp make_pair
#define fir first
#define sec second
#define ls(x) (x<<1)
#define rs(x) ((x<<1)|1)
#define lowbit(i) (i&-i)
using namespace std;
typedef long long ll;
const int N=1e6+5,M=55,mo=998244353,inf=(ll)1e18+7;
const double PI=acos(-1);
void read(int &a){
    int x=0,w=1;
    char ch=getchar();
    while(!isdigit(ch)){
        if(ch=='-')w=-1;
        ch=getchar();
    }
    while(isdigit(ch)){
        x=(x<<3)+(x<<1)+ch-'0';
        ch=getchar();
    }
    a=x*w;
}
int T,n;
string s;
int d[N];
bool leg[N];
void solve(){
    getline(cin,s),n=s.size();
    if(n==1){
        cout<<'1'<<'\n';
        return;
    }
    rep(i,0,n-1)
        d[i]=leg[i]=0;
    int mid=-1,mr=-1;
    rep(i,0,n-1){//manacher
        if(mr>i){
            int mir=mid-(i-mid);
            if(i+d[mir]-1<mr){
                d[i]=d[mir];
                continue;
            }
            d[mir]=mr-i+1;
        }
        while(i+d[i]<=n-1&&i-d[i]>=0&&s[i+d[i]]==s[i-d[i]])
            d[i]++;
        if(i+d[i]-1>mr)mr=i+d[i]-1,mid=i;
    }
    repp(i,n-1,0){
        if(i*2>n-1){
            if(d[i]+i-1==n-1)leg[i]=1;
        }
        else{
            if(i-d[i]+1==0&&leg[i*2])leg[i]=1;
        }
    }
    rep(i,0,n-1)
        if(leg[i])cout<<i+1<<' ';
    cout<<'\n';
}
signed main(){
    read(T);
    while(T--)
        solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3568kb

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: