제출 #153052

#제출 시각아이디문제언어결과실행 시간메모리
153052fedoseevtimofeyLamps (JOI19_lamps)C++14
100 / 100
358 ms41608 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int N = 1e6 + 7; int dp[N][2][2][2]; int a[N], b[N]; const int Inf = 1e9 + 7; bool valid(int i, int j, int k, int id) { if (i == 1 && j == 1) return false; int x = a[id]; if (i) x = 0; if (j) x = 1; if (k) x ^= 1; return x == b[id]; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.setf(ios::fixed); cout.precision(20); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int n; cin >> n; for (int i = 0; i < n; ++i) { char c; cin >> c; a[i] = c - '0'; } for (int i = 0; i < n; ++i) { char c; cin >> c; b[i] = c - '0'; } for (int i = 0; i < N; ++i) { for (int j = 0; j < 2; ++j) { for (int k = 0; k < 2; ++k) { for (int t = 0; t < 2; ++t) { dp[i][j][k][t] = Inf; } } } } dp[0][0][0][0] = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < 2; ++j) { for (int k = 0; k < 2; ++k) { for (int t = 0; t < 2; ++t) { for (int nj = 0; nj < 2; ++nj) { for (int nk = 0; nk < 2; ++nk) { for (int nt = 0; nt < 2; ++nt) { if (valid(nj, nk, nt, i)) { int delta = (nj > j) + (nk > k) + (nt > t); dp[i + 1][nj][nk][nt] = min(dp[i + 1][nj][nk][nt], dp[i][j][k][t] + delta); } } } } } } } } int ans = Inf; for (int i = 0; i < 2; ++i) for (int j = 0; j < 2; ++j) for (int k = 0; k < 2; ++k) ans = min(ans, dp[n][i][j][k]); cout << ans << '\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...