# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
225244 | MKopchev | Snake Escaping (JOI18_snake_escaping) | C++14 | 1164 ms | 54520 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int nmax=(1<<20)+42;
int l,n,q;
int inp[nmax];
char cur[25];
int cnt_bits[nmax];
long long dp_ones[nmax],dp_zeros[nmax];
int main()
{
scanf("%i%i",&l,&q);
n=1<<l;
for(int i=1;i<n;i++)
{
cnt_bits[i]=cnt_bits[i/2]+i%2;
}
for(int i=0;i<n;i++)
{
char c=getchar();
while('0'>c||c>'9')c=getchar();
inp[i]=c-'0';
}
for(int i=0;i<n;i++)dp_ones[i]=inp[n-1-i];
for(int i=0;i<l;i++)
for(int mask=0;mask<n;mask++)
if((mask&(1<<i)))dp_ones[mask]+=dp_ones[mask-(1<<i)];
for(int i=0;i<n;i++)dp_zeros[i]=inp[i];
for(int i=0;i<l;i++)
for(int mask=n-1;mask>=0;mask--)
if((mask&(1<<i)))dp_zeros[mask]+=dp_zeros[mask-(1<<i)];
for(int t=1;t<=q;t++)
{
long long output=0;
int question=0;
int one=0;
int zero=0;
for(int j=1;j<=l;j++)
{
char c=getchar();
while(c!='?'&&c!='0'&&c!='1')c=getchar();
if(c=='?')question+=(1<<(l-j));
if(c=='0')zero+=(1<<(l-j));
if(c=='1')one+=(1<<(l-j));
}
if(cnt_bits[question]<=cnt_bits[zero]&&cnt_bits[question]<=cnt_bits[one])
{
int mask=question;
while(true)
{
output+=inp[one+mask];
if(mask==0)break;
mask=(mask-1)&question;
}
}
else if(cnt_bits[zero]<=cnt_bits[one])
{
int mask=zero;
while(true)
{
if(cnt_bits[mask]%2)output+=dp_ones[question+mask];
else output-=dp_ones[question+mask];
if(mask==0)break;
mask=(mask-1)&zero;
}
}
else
{
int mask=one;
while(true)
{
if(cnt_bits[mask]%2)output+=dp_zeros[question+mask];
else output-=dp_zeros[question+mask];
if(mask==0)break;
mask=(mask-1)&one;
}
}
output=abs(output);
printf("%lld\n",output);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |