QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#390780 | #6299. Binary String | wtc | WA | 85ms | 3888kb | C++14 | 1.4kb | 2024-04-15 21:34:45 | 2024-04-15 21:34:46 |
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<<1];
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]);
}
f[n+1]=0;
fd(i,n,1) f[i]=f[i+1]+(s[i]=='0'?-1:1);
mx=-1;st=n;
fd(i,n,1)
{
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];
fd(i,n,1)
{
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]=max(t[o],p[o]);p[o]++;p[o-1]--;
if(p[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]);
m=n+1;
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();
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3844kb
input:
3 1 001001 0001111
output:
1 3 9
result:
ok 3 number(s): "1 3 9"
Test #2:
score: -100
Wrong Answer
time: 85ms
memory: 3888kb
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 20 19 19 20 21 18 18 18 19 18 18 20 21 19 19 19 21 20 20 21 22 18 18 18 19 18 18 19 21 18 18 18 21 20 20 21 22 19 19 19 19 19 19 21 22 20 20 20 22 21 21 22 23 18 18 18 19 18 18 19 20 18 18 18 20 19 19 21 22 18 18 18 19 18 18 21 22 20 20 20 22 21 21 22 23 19 19 19 19 1...
result:
wrong answer 4074th numbers differ - expected: '9', found: '25'