QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#390753 | #6299. Binary String | wtc | WA | 95ms | 8040kb | C++14 | 1.4kb | 2024-04-15 21:08:22 | 2024-04-15 21:08:23 |
Judging History
answer
#include<bits/stdc++.h>
#define fo(i,l,r) for(int i=(l);i<=(r);++i)
#define fd(i,l,r) for(int i=(l);i>=(r);--i)
#define fu(i,l,r) for(int i=(l);i<(r);++i)
#define ll long long
using namespace std;
const int N=1e7+7;
int n,m,o,p[N],t[N],f[N],g[N],ans,cnt,mx,st;char s[N];
void kmp(int n,int *s,int *f)
{
f[1]=0;
fo(i,2,n)
{
f[i]=f[i-1];
while(f[i]&&s[f[i]+1]!=s[i]) f[i]=f[f[i]];
if(s[f[i]+1]==s[i]) f[i]++;
}
}
void work()
{
scanf("%s",s+1);n=strlen(s+1);
fo(i,1,n) cnt+=s[i]=='0';
if(cnt==0||cnt==n){printf("1\n");return;}
if((cnt<<1)<n)
{
fo(i,1,n) s[i]^=1;
for(int i=1;i<n-i+1;++i) swap(s[i],s[n-i+1]);
}
fo(i,1,n) f[i]=f[i-1]+(s[i]=='0'?-1:1);
mx=-1;
fo(i,1,n)
{
if(f[i-1]>mx) mx=f[i-1],st=i;
}
fu(i,1,st) s[n+i]=s[i];
fo(i,1,n) s[i]=s[i+st-1];
fo(i,1,n)
{
if(s[i]=='0')
{
if(!(o&1)) o++;
p[o]++;
continue;
}
if(o&1)
{
p[o]--;
if(!p[o]&&o>1) o--,p[o]++;
else p[++o]=1,t[o]=0;
continue;
}
t[o]++;t[o-1]--;
if(t[o-1]==0&&o>2) t[o-2]=max(t[o-2],t[o]),p[o-2]+=p[o],o-=2;
}
fo(i,1,o) if(!(i&1)) ans=max(ans,t[i]);
fo(i,1,o)
{
fo(j,1,p[i])
{
g[++m]=0;
if(!(i&1)) g[++m]=1;
}
}
kmp(n,g,f);
m=f[n];
while(n%(n-m)) m=f[m];
printf("%d\n",ans+n-m);
fo(i,0,n) t[i]=p[i]=0;
cnt=0;o=0;m=0;ans=0;
}
int main()
{
int T;scanf("%d",&T);
while(T--) work();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 8024kb
input:
3 1 001001 0001111
output:
1 3 9
result:
ok 3 number(s): "1 3 9"
Test #2:
score: -100
Wrong Answer
time: 95ms
memory: 8040kb
input:
262144 000000000000000000 100000000000000000 010000000000000000 110000000000000000 001000000000000000 101000000000000000 011000000000000000 111000000000000000 000100000000000000 100100000000000000 010100000000000000 110100000000000000 001100000000000000 101100000000000000 011100000000000000 11110000...
output:
1 18 18 19 18 18 19 20 18 18 18 19 19 19 20 21 18 18 18 19 18 18 19 20 19 19 19 20 20 20 21 22 18 18 18 19 18 18 19 20 18 18 18 19 19 19 20 21 19 19 19 19 19 19 20 21 20 20 20 21 21 21 22 23 18 18 18 19 18 18 19 20 18 18 18 19 19 19 20 21 18 18 18 19 18 18 19 20 19 19 19 20 20 20 21 22 19 19 19 19 1...
result:
wrong answer 12th numbers differ - expected: '20', found: '19'