Submission #532548

#TimeUsernameProblemLanguageResultExecution timeMemory
532548rk42745417Snake Escaping (JOI18_snake_escaping)C++17
22 / 100
395 ms32708 KiB
#include <bits/stdc++.h>
using namespace std;

#define EmiliaMyWife ios::sync_with_stdio(0); cin.tie(0);
using ll = int64_t;
using uint = uint32_t;
using ull = uint64_t;
using ld = long double;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
const ll LINF = ll(4e18) + ll(2e15);
static int LamyIsCute = []() {
	EmiliaMyWife
	return 48763;
}();

signed main() {
	int n, q;
	cin >> n >> q;
	vector<int> mpow(n + 1, 1);
	for(int i = 1; i <= n; i++)
		mpow[i] = mpow[i - 1] * 3;
	vector<int> dp(mpow[n]), prv(mpow[n]);
	{
		string s;
		cin >> s;
		for(int i = 0; i < s.size(); i++) {
			int r = 0;
			for(int j = 0; j < n; j++)
				if(i >> j & 1)
					r += mpow[j];
			dp[r] = s[i] - '0';
		}
	}
	for(int i = 0; i < n; i++) {
		swap(prv, dp);
		for(int j = 0; j < mpow[n]; j++) {
			int x = j / mpow[i] % 3;
			if(x < 2)
				dp[j] = prv[j];
			else
				dp[j] = prv[j - mpow[i] * 2] + prv[j - mpow[i]];
		}
	}

	while(q--) {
		string s;
		cin >> s;
		reverse(s.begin(), s.end());
		int r = 0;
		for(int i = 0; i < n; i++) {
			if(s[i] == '?')
				r += mpow[i] * 2;
			else
				r += mpow[i] * (s[i] & 1);
		}
		cout << dp[r] << '\n';
	}
}

Compilation message (stderr)

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:28:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for(int i = 0; i < s.size(); i++) {
      |                  ~~^~~~~~~~~~
#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...