Submission #286819

#TimeUsernameProblemLanguageResultExecution timeMemory
286819MatheusLealVSnake Escaping (JOI18_snake_escaping)C++17
22 / 100
884 ms26360 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
using namespace std;
typedef pair<int, int> pii;
#define N 350010

int n, q;
string t;
int ans[1600000], pot3[30];

void solve(int i, int mask, int mask2, int cost){
	if(i >= n){
		ans[mask2] += cost;
		return;
	}
	solve(i + 1, mask, mask2 + 2*pot3[i], cost); // adiciona ?
	if(mask & (1<<i)) solve(i + 1, mask, mask2 + pot3[i], cost); // adiciona 1
	else solve(i + 1, mask, mask2, cost); // adiciona 0
}
int32_t main(){
	ios::sync_with_stdio(false); cin.tie(0);
	cin>>n>>q;
	cin>>t;
	pot3[0] = 1;
	for(int i = 1; i < 30; i++) pot3[i] = (3*pot3[i-1]);

	for (int mask=0; mask<(1<<n); ++mask){
		solve(0, mask, 0, (t[mask]-'0'));
	}
	while(q--){
		string s;
		int mask = 0;
		cin>>s;
		reverse(all(s));
		for(int i = 0; i < n; i++){
			if(s[i] == '1') mask += pot3[i];
			else if(s[i] == '?') mask += 2*pot3[i];
		}
		cout<<ans[mask]<<"\n";
	}
}
#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...