QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#67740 | #4789. Infinite Pattern Matching | A_zjzj | WA | 3ms | 3420kb | C++14 | 1.2kb | 2022-12-11 19:07:39 | 2022-12-11 19:07:40 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;using ll=long long;const int N=60;
int n,a[N];char str[N];ll ans=5e18;
ll calc(int x){int y=__lg(x);ll s=0;for(int i=1;i<=y;i++)s+=((1<<i)-(1<<i-1))*i;s+=(x-(1<<y)+1)*(y+1);return s;}
int trs(int l,int r){int s=0;for(int i=l;i<=r;i++)s=s*2+a[i];return s;}
bool cmp(int l,int r,int x){if(__lg(x)!=r-l)return 0;for(int i=r;i>=l;i--,x>>=1)if(i<=n&&i>=1&&(x&1)!=a[i])return 0;return 1;}
bool comp(int x,int y,int len){for(int i=0;i<len;i++)if(a[i+x]!=a[i+y])return 0;return 1;}
bool chk(int l,int r){
int x=trs(l,r);if(!x)return 0;for(int i=r+1,j=x+1;i<=n;i+=__lg(j++)+1)if(!cmp(i,i+__lg(j),j))return 0;
for(int i=l-1,j=x-1;i>0;i-=__lg(j--)+1)if(j<=0||!cmp(i-__lg(j),i,j))return 0;return 1;
}
int main(){
int l=1,r=1e7,mid;
for(;l+1<r;)(calc(mid=(l+r)>>1)<=4627720?l:r)=mid;
cerr<<l<<' '<<calc(l)<<endl;
cin>>str+1;n=strlen(str+1);for(int i=1;i<=n;i++)a[i]=str[i]&1;a[0]=1;
for(int i=1;i<=n;i++)if(a[i])for(int j=i;j<=n;j++)if(chk(i,j))ans=min(ans,calc(trs(i,j))+n-j);
if(ans>=5e18){
int st=-1,ed=-1;for(int i=1;i<=n;i++)if(a[i])ed=i;for(int i=n;i>=1;i--)if(a[i])st=i;
ans=1;for(int i=max(n-ed,st-1);i;i--)ans*=2;
for(int i=st;i<ed;i++)ans=ans*2+a[i];ans=calc(ans)+n-ed+1;
}cout<<ans;return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 3420kb
input:
11
output:
2
result:
ok answer is '2'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3276kb
input:
011011
output:
42
result:
ok answer is '42'
Test #3:
score: 0
Accepted
time: 2ms
memory: 3284kb
input:
01000110011010110000
output:
4627720
result:
ok answer is '4627720'
Test #4:
score: -100
Wrong Answer
time: 2ms
memory: 3364kb
input:
1011000001101110110111001010001010010101010000101
output:
-1806522270
result:
wrong answer expected '1617827598069187', found '-1806522270'