Submission #797843

#TimeUsernameProblemLanguageResultExecution timeMemory
797843PurpleCrayonLamps (JOI19_lamps)C++17
100 / 100
102 ms4416 KiB
#include <bits/stdc++.h> using namespace std; #define sz(v) int(v.size()) #define ar array typedef long long ll; const int N = 6e1+10, MOD = 1e9+7; const ll INF = 1e18+10; // 0 = empty // 1 = {0} // 2 = {1} // 3 = {0, 1} // 4 = {1, 0} pair<int, int> trans(int prv, int nxt, int state) { if (prv == nxt) { if (nxt == 0) { if (state == 0) return {0, state}; else if (state == 1) return {0, state}; else if (state == 2) return {0, 0}; else if (state == 3) return {0, 1}; else if (state == 4) return {0, state}; } else { if (state == 0) return {0, state}; else if (state == 1) return {0, 0}; else if (state == 2) return {0, state}; else if (state == 3) return {0, state}; else if (state == 4) return {0, 2}; } } if (nxt == 1) { if (state == 0) return {1, 2}; else if (state == 1) return {1, 3}; else if (state == 2) return {0, state}; else if (state == 3) return {0, state}; else if (state == 4) return {0, 2}; } else { if (state == 0) return {1, 1}; else if (state == 1) return {0, state}; else if (state == 2) return {1, 4}; else if (state == 3) return {0, 1}; else if (state == 4) return {0, state}; } assert(false); } int prv[5][2], cur[5][2]; void solve() { int n; cin >> n; string s, t; cin >> s >> t; for (int i = 0; i < 5; i++) { for (int j = 0; j < 2; j++) { prv[i][j] = cur[i][j] = MOD; } } prv[0][0] = 0; for (int i = 0; i < n; i++) { int x = s[i] - '0', y = t[i] - '0'; for (int prv_state = 0; prv_state < 5; prv_state++) { for (int prv_flip = 0; prv_flip < 2; prv_flip++) { for (int me = 0; me < 2; me++) { int flip = me ^ y; auto [cost, nxt_state] = trans(x, me, prv_state); cost += flip && !prv_flip; cur[nxt_state][flip] = min(cur[nxt_state][flip], prv[prv_state][prv_flip] + cost); } } } for (int j = 0; j < 5; j++) { for (int k = 0; k < 2; k++) { prv[j][k] = cur[j][k], cur[j][k] = MOD; } } } int ans = MOD; for (int i = 0; i < 5; i++) for (int j = 0; j < 2; j++) ans = min(ans, prv[i][j]); cout << ans << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(0); int T = 1; // cin >> T; 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...