Submission #955810

#TimeUsernameProblemLanguageResultExecution timeMemory
955810hqminhuwuLamps (JOI19_lamps)C++14
100 / 100
27 ms59156 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair <ll,ll> pll;
typedef pair <int,int> pii;
typedef pair <int,pii> piii;

#define forr(_a,_b,_c) for(int _a = (_b); _a <= (_c); ++_a)
#define ford(_a,_b,_c) for(int _a = (_b) + 1; _a  -  - > (_c);)
#define forf(_a,_b,_c) for(int _a = (_b); _a < (_c); ++_a)
#define st first
#define nd second
#define pb push_back
#define mp make_pair
#define all(x) begin(x),end(x)
#define mask(i) (1LL << (i))
#define bit(x, i) (((x) >> (i)) & 1)
#define bp __builtin_popcountll
#define file "test"

const int N = 2e6 + 5;
const ll oo = 1e9;
const ll mod = 1e9 + 7;

int n, dp[N][7];
string a, b;

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    #ifdef hqm
        freopen(file".inp", "r", stdin); freopen(file".out", "w", stdout);
    #endif

    cin >> n >> a >> b;
    
    a = '0' + a;
    b = '0' + b;

    memset (dp, 63, sizeof dp);
    dp[0][0] = 0;

    // 0 1 2 12 3 13
    
    forr (i, 1, n){
        if (b[i] == '0') {
            dp[i][5] = dp[i - 1][5];
            dp[i][5] = min (dp[i][5], dp[i - 1][0] + 2);
            dp[i][5] = min (dp[i][5], dp[i - 1][1] + 1);
            dp[i][5] = min (dp[i][5], dp[i - 1][4] + 1);
            dp[i][2] = min (dp[i - 1][0] + 1, dp[i - 1][2]);
           
        } else {
            dp[i][3] = dp[i - 1][3];
            dp[i][3] = min (dp[i][3], dp[i - 1][0] + 2);
            dp[i][3] = min (dp[i][3], dp[i - 1][1] + 1);
            dp[i][3] = min (dp[i][3], dp[i - 1][2] + 1);
            dp[i][4] = min (dp[i - 1][0] + 1, dp[i - 1][4]);
        }
 
        if(a[i] != b[i]) {
            dp[i][1] = min (dp[i - 1][1], dp[i - 1][0] + 1);
        } else {
            dp[i][0] = dp[i - 1][0];
        }
        
        dp[i][4] = min (dp[i][4], dp[i][5]);
        dp[i][1] = min (dp[i][1], min (dp[i][3], dp[i][5]));
        dp[i][2] = min (dp[i][2], dp[i][3]);
        dp[i][0] = min (dp[i][0], min (dp[i][1], dp[i][2]));
        dp[i][0] = min (dp[i][0], min (dp[i][3], min(dp[i][4], dp[i][5])));
    }

    cout << dp[n][0];

    return 0;
}
/*



*/

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...