Submission #331407

#TimeUsernameProblemLanguageResultExecution timeMemory
331407EIMONIMLamps (JOI19_lamps)C++14
100 / 100
123 ms59252 KiB
#include <bits/stdc++.h>
/*#define int int64_t
#define vi vector<int>
#define ii pair<int,int>
#define vb vector<bool>
#define vvi vector<vi>
#define vvb vector<vb>
#define vii vector<ii>
#define vvii vector<vii>
#define x first
#define y second
#define pb push_back
#define chkmax(a,b) a = max(a,b)
#define chkmin(a,b) a=min(a,b)
#define all(x) x.begin(),x.end()*/
#define loop(i,s,e) for(int i=s;i<e;i++)
#define loopr(i,s,e) for(int i=e-1;i>=s;i--)
using namespace std;
const int INF = 1e9, MOD = 1e9 + 7;


 
int32_t main(){
    ios_base::sync_with_stdio(false);
    int n; cin>>n;
    string a,b; cin>>a>>b;
    for(char &c:a) c-='0';
    for(char &c:b) c-='0';
    vector<vector<int>> cost(6, vector<int>(6));
    loop(x,0,6) loop(y,0,6){
        if (y%2==1 && x%2!=1) cost[x][y]++; // start toggle
        if (y%3==1 && x%3!=1) cost[x][y]++; // start zero
        if (y%3==2 && x%3!=2) cost[x][y]++; // start one
    }
    vector<vector<int>> dp(n+1, vector<int>(6, INF));
    loop(x,0,6) dp[0][x] = (x%2!=0) + (x%3!=0);
    loop(i,0,n){
        loop(x,0,6){
            bool c = a[i];
            if (x%3 == 1) c = 0; // set to zero
            else if (x%3 == 2) c = 1; // set to one
            if (x%2 == 1) c = !c; // toggle
            if (c == b[i]){
                loop(y,0,6){
                    dp[i+1][y] = min(dp[i+1][y], dp[i][x] + cost[x][y]);
                }
            }
        }
    }
    cout<<dp[n][0]<<endl;
    return 0;
}
/*
color a
cls
g++ lamps.cpp -o a & a
8
11011100
01101001




*/

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