Submission #796786

#TimeUsernameProblemLanguageResultExecution timeMemory
796786vjudge1Lamps (JOI19_lamps)C++14
100 / 100
65 ms25992 KiB
#include<bits/stdc++.h> using namespace std ; const int N = 1e6 ; int n, dp[N + 1][3][2], ans = 1e9 ; char a[N + 1], b[N + 1] ; int main() { ios_base::sync_with_stdio( 0 ) ; cin.tie( 0 ) ; cout.tie( 0 ) ; cin >> n ; for(int i = 1 ; i <= n ; i++) cin >> a[i] ; for(int i = 1 ; i <= n ; i++) cin >> b[i] ; for(int i = 0 ; i <= N ; i++) for(int j = 0 ; j < 3 ; j++) for(int q = 0 ; q < 2 ; q++) dp[i][j][q] = 1e9 ; dp[0][0][0] = 0 ; for(int i = 1 ; i <= n ; i++) { for(int j = 0 ; j < 3 ; j++) for(int q = 0 ; q < 2 ; q++) dp[i][0][0] = min(dp[i][0][0], dp[i - 1][j][q]) ; dp[i][0][1] = min({dp[i - 1][1][0] + 1, dp[i - 1][2][0] + 1, dp[i - 1][1][1], dp[i - 1][2][1], dp[i - 1][0][0] + 1, dp[i - 1][0][1]}) ; dp[i][1][0] = min({dp[i - 1][1][0], dp[i - 1][2][0] + 1, dp[i - 1][0][0] + 1, dp[i - 1][1][1], dp[i - 1][2][1] + 1, dp[i - 1][0][1] + 1}) ; dp[i][2][0] = min({dp[i - 1][2][0], dp[i - 1][1][0] + 1, dp[i - 1][0][0] + 1, dp[i - 1][2][1], dp[i - 1][1][1] + 1, dp[i - 1][0][1] + 1}) ; dp[i][1][1] = min({dp[i - 1][2][0] + 2, dp[i - 1][1][0] + 1, dp[i - 1][0][0] + 2, dp[i - 1][2][1] + 1, dp[i - 1][1][1], dp[i - 1][0][1] + 1}) ; dp[i][2][1] = min({dp[i - 1][1][0] + 2, dp[i - 1][2][0] + 1, dp[i - 1][0][0] + 2, dp[i - 1][1][1] + 1, dp[i - 1][2][1], dp[i - 1][0][1] + 1}) ; for(int j = 0 ; j < 3 ; j++) for(int q = 0 ; q < 2 ; q++) { int num = (a[i] - '0') ; if(j == 1)num = 1 ; if(j == 2)num = 0 ; if(q == 1)num ^= 1 ; if(num != b[i] - '0') dp[i][j][q] = 1e9 ; } } for(int j = 0 ; j < 3 ; j++) for(int q = 0 ; q < 2 ; q++) ans = min(ans, dp[n][j][q]) ; cout << ans ; return 0 ; } //dp[i][j][q] //j = 0 есди сейчас мы не пользовались первым или вторым видом операций //j = 1 если сейчас мы сделали на каком то отрезке присваение числу 1 //j = 2 если сейчас мы сделали на каком то отрезке присваение числу 0 //q = 0 если сейчас мы не делаем xor на отрезке в данный момент //q = 1 если сейчас мы делаем xor на отрезке в данный момент
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...