제출 #1348708

#제출 시각아이디문제언어결과실행 시간메모리
1348708jahongirSnake Escaping (JOI18_snake_escaping)C++20
22 / 100
2095 ms12504 KiB
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

const int mxn = pow(3,13);
int dp[mxn], memo[13];

void solve(){	
	int l,q; cin >> l >> q;
	string s; cin >> s;

	memo[0] = 1;
	for(int i = 1; i < 13; i++)
		memo[i] = memo[i-1]*3;

	for(int mask = 0; mask < 1<<l; mask++){

		for(int sub = 0; sub < 1<<l; sub++){
			int num = 0;
			
			for(int i = 0; i < l; i++){
				if(sub&(1<<i)) num += 2*memo[i];
				else num += ((mask>>i)&1)*memo[i];
			}

			dp[num] += s[mask]-'0';
		}
	}
	
	for(int t = 0; t < q; t++){
		cin >> s;
		reverse(s.begin(),s.end());
		int num = 0;
		
		for(int i = 0; i < l; i++)
			num += (s[i]=='?'?2:(int)s[i]-'0')*memo[i];

		cout << dp[num] << '\n';
	}

}


signed main(){
	cin.tie(0)->sync_with_stdio(false);
	int t = 1;
	while(t--){solve();}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...