QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#67743#4789. Infinite Pattern MatchingA_zjzjWA 2ms3420kbC++141.2kb2022-12-11 19:27:032022-12-11 19:27:04

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-12-11 19:27:04]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 3420kb
  • [2022-12-11 19:27:03]
  • Submitted

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(ll x){int y=__lg(x);ll s=0;for(int i=1;i<=y;i++)s+=((1ll<<i)-(1ll<<i-1))*i;s+=(x-(1ll<<y)+1)*(y+1);return s;}
ll trs(int l,int r){ll 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(){
	ll l=1,r=1ll<<55,mid;
	for(;l+1<r;)(calc(mid=(l+r)>>1)<=1743694743?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;
	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);
	for(int i=1;i<=n;i++)if(a[i])for(int j=0;j<i;j++)if(comp(1,n-j+1,j)){
		ll x=0;for(int k=i;k<=n;k++)x=x*2+a[k];for(int k=j+1;k<i;k++)x=x*2+a[k];ans=min(ans,calc(x)+n-i+1);
	}cout<<ans;return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3360kb

input:

11

output:

2

result:

ok answer is '2'

Test #2:

score: -100
Wrong Answer
time: 2ms
memory: 3420kb

input:

011011

output:

12

result:

wrong answer expected '42', found '12'