Submission #58955

# Submission time Handle Problem Language Result Execution time Memory
58955 2018-07-19T21:30:43 Z TadijaSebez Snake Escaping (JOI18_snake_escaping) C++11
Compilation error
0 ms 0 KB
#include <stdio.h>
const int N=1<<20;
int dp0[N],dp1[N],pc[N];
char s[N],t[20];
int min(int a, int b){ return a>b?b:a;}
int abs(int x){ return x>0?x:-x;}
int main()
{
	int n,q,i,mask;
	for(i=1;i<N;i++) pc[i]=pc[i-(i&-i)]+1;
	scanf("%i %i",&n,&q);
	scanf("%s",s);
	for(i=0;i<(1<<n);i++)
	{
		dp1[i]=dp0[((1<<n)-1)^i]=s[i]-'0';
	}
	for(i=0;i<n;i++)
	{
		for(mask=0;mask<(1<<n);mask++)
		{
			if((mask>>i)&1)
			{
				dp1[mask]+=dp1[mask^(1<<i)];
				dp0[mask]+=dp0[mask^(1<<i)];
			}
		}
	}
	while(q--)
	{
		scanf("%s",t);
		int a=0,b=0,c=0;
		for(i=0;i<n;i++)
		{
			if(t[n-i-1]=='0') a+=1<<i;
			else if(t[n-i-1]=='1') b+=1<<i;
			else c+=1<<i;
		}
		int ans=0;
		if(pc[a]<=min(pc[b],pc[c]))
		{
			for(mask=a;;mask=(mask-1)&a)
			{
				//printf("a:%i %i\n",a,mask);
				if((pc[mask]&1)==(pc[a]&1)) ans+=dp0[mask|c];
				else ans-=dp0[mask|c];
				if(!mask) break;
			}
		}
		else if(pc[b]<=min(pc[a],pc[c]))
		{
			for(mask=b;;mask=(mask-1)&b)
			{
				//printf("b:%i %i\n",b,mask);
				if((pc[mask]&1)==(pc[b]&1) ans+=dp1[mask|c];
				else ans-=dp1[mask|c];
				if(!mask) break;
			}
		}
		else
		{
			for(mask=c;;mask=(mask-1)&c)
			{
				//printf("c:%i %i\n",c,mask);
				ans+=s[mask|b]-'0';
				if(!mask) break;
			}
		}
		printf("%i\n",abs(ans));
	}
	return 0;
}

Compilation message

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:54:8: warning: init-statement in selection statements only available with -std=c++1z or -std=gnu++1z
     if((pc[mask]&1)==(pc[b]&1) ans+=dp1[mask|c];
        ^
snake_escaping.cpp:54:32: error: expected ';' before 'ans'
     if((pc[mask]&1)==(pc[b]&1) ans+=dp1[mask|c];
                                ^~~
snake_escaping.cpp:54:20: warning: statement has no effect [-Wunused-value]
     if((pc[mask]&1)==(pc[b]&1) ans+=dp1[mask|c];
        ~~~~~~~~~~~~^~~~~~~~~~~
snake_escaping.cpp:55:5: error: expected primary-expression before 'else'
     else ans-=dp1[mask|c];
     ^~~~
snake_escaping.cpp:55:5: error: expected ')' before 'else'
snake_escaping.cpp:11:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%i %i",&n,&q);
  ~~~~~^~~~~~~~~~~~~~~
snake_escaping.cpp:12:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s",s);
  ~~~~~^~~~~~~~
snake_escaping.cpp:30:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s",t);
   ~~~~~^~~~~~~~