This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |