Submission #206598

#TimeUsernameProblemLanguageResultExecution timeMemory
206598egekabasLamps (JOI19_lamps)C++14
4 / 100
50 ms41552 KiB
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long   ll;
typedef unsigned long long   ull;
typedef long double ld;
typedef pair<ll, ll>    pll;
typedef pair<ull, ull>    pull;
typedef pair<ll, ll>  pii;
typedef pair<ld, ld>  pld;
ll n;
ll a[1000009];
ll b[1000009];
ll same[1000009];
ll dp[1000009][2];
string s1, s2;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    
    cin >> n >> s1 >> s2;
    for(ll i = 1; i <= n; ++i)
        a[i] = (s1[i-1]-'0');
    for(ll i = 1; i <= n; ++i)
        b[i] = (s2[i-1]-'0');
    for(ll i = 1; i <= n; ++i){
        if(i != 1 && b[i-1] == b[i])
            same[i] = same[i-1];
        else
            same[i] = i;
        dp[i][0] = dp[i][1] = 1e9;
    }
    for(ll i = 1; i <= n; ++i){

        if(a[i] == b[i]){
            dp[i][0] = min(dp[i][0], dp[i-1][0]);
            dp[i][1] = min(dp[i][1], 1+min(dp[i-1][1],dp[i-1][0]));
        }
        else{
            dp[i][0] = min(dp[i][0], 1+dp[i-1][0]);
            dp[i][1] = min(dp[i][1], min(dp[i-1][1],dp[i-1][0]));
        }
        dp[i][0] = min(dp[i][0], dp[same[i]-1][0]+1);
        dp[i][1] = min(dp[i][1], min(dp[same[i]-1][1], dp[same[i]-1][0])+1);
        
        dp[i][1] = min(dp[i][1], dp[i][0]+1);
        dp[i][0] = min(dp[i][0], dp[i][1]+1);
        //cout << i << ' ' << dp[i][0] << ' ' << dp[i][1] << '\n';
    }
    cout << dp[n][0] << '\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...