# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
225244 | MKopchev | Snake Escaping (JOI18_snake_escaping) | C++14 | 1164 ms | 54520 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}
컴파일 시 표준 에러 (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... |