QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#816956 | #2840. 绿绿与串串 | yanshanjiahong | TL | 0ms | 3568kb | C++14 | 1.5kb | 2024-12-16 19:26:32 | 2024-12-16 19:26:32 |
Judging History
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...