QOJ.ac
QOJ
The 2nd Universal Cup Finals is coming! Check out our event page, schedule, and competition rules!
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#21550 | #2840. 绿绿与串串 | Hailiang FLS# | WA | 0ms | 5640kb | C++20 | 2.0kb | 2022-03-07 14:58:09 | 2022-05-08 03:37:35 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<vector>
#include<queue>
#include<algorithm>
#include<string>
#include<sstream>
#include<cctype>
#include<cmath>
#include<iomanip>
#include<map>
#include<stack>
#include<set>
#include<functional>
#define in(x) x=read()
#define qr read()
#define int ll
#define mp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
namespace fastIO
{
#define BUF_SIZE 100000
bool IOerror=0;
inline char nc()
{
static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
if (p1==pend){
p1=buf; pend=buf+fread(buf,1,BUF_SIZE,stdin);
if (pend==p1){IOerror=1;return -1;}
}
return *p1++;
}
inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';}
inline ll read()
{
bool sign=0; char ch=nc();ll x=0;
for (;blank(ch);ch=nc());
if (IOerror)return 0;
if (ch=='-')sign=1,ch=nc();
for (;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
if (sign)x=-x;
return x;
}
#undef BUF_SIZE
};
using namespace fastIO;
char s[1000010];
int d[1000010],nxt[1000010];
signed main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int T=qr;
int n;
while(T--)
{
n=0;
char ch=nc();
for(;isalpha(ch);ch=nc())s[++n]=ch;
if(n==1)
{
cout<<1<<'\n';
continue;
}
s[0]='~';
int r=0,p=0;
for(int i=1;i<=n;i++)
{
if(i<r)d[i]=min(d[p*2-i],d[p]+p-i);
else d[i]=1;
while(s[i-d[i]]==s[i+d[i]])d[i]++;
if(i+d[i]>r)r=i+d[i],p=i;
}
int j=0;nxt[1]=0;
for(int i=2;i<=n;i++)
{
while(s[i]!=s[j+1]&&j)j=nxt[j];
if(s[i]==s[j+1])j++;
nxt[i]=j;
}
// for(int i=1;i<=n;i++)cout<<nxt[i]<<'\n';
int now=nxt[n];
while(now)
{
int len=n-now;
if(d[len/2+1]>=len/2+1)cout<<len/2+1<<' ';
now=nxt[now];
}
for(int i=n/2+1+n%2;i<=n;i++)if(d[i]>=n-i+1)cout<<i<<' ';cout<<'\n';
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 5640kb
input:
7 abcdcb qwqwq qaqaqqq carnation c ab aa
output:
4 6 2 3 4 5 6 7 9 1 2 1 2
result:
wrong answer 7th lines differ - expected: '2', found: '1 2 '