Submission #483172

#TimeUsernameProblemLanguageResultExecution timeMemory
483172phamhoanghiepLamps (JOI19_lamps)C++17
100 / 100
99 ms31076 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+6;
string st;
string en;
int mask[maxn]; // 0: 0, 1: 1, 2: f, 3: 0f, 4: 1f, 5: nothing
int dp[maxn][6];
int n;
signed main() {
    cin>>n;
    cin>>st>>en;
    st=' '+st;
    en=' '+en;
    for(int i=1 ; i<=n ; i++) {
        if(st[i]!=en[i]) mask[i]+=(1<<2);
        if(en[i]=='0') mask[i]+=(1<<4)+(1<<0);
        if(en[i]=='1') mask[i]+=(1<<1)+(1<<3);
        dp[i][0]=dp[i][1]=dp[i][2]=dp[i][3]=dp[i][4]=dp[i][5]=n+1;
    }
    dp[0][0]=dp[0][1]=dp[0][2]=1; dp[0][3]=dp[0][4]=2; dp[0][5]=0;
    for(int i=1 ; i<=n ; i++) {
        if(en[i]=='0') {
            // 0 or 1f
            dp[i][0]=min({dp[i-1][0],dp[i-1][1]+1,dp[i-1][2]+1,dp[i-1][3],dp[i-1][4]+1,dp[i-1][5]+1});
            dp[i][4]=min({dp[i-1][0]+2,dp[i-1][1]+1,dp[i-1][2]+1,dp[i-1][3]+1,dp[i-1][4],dp[i-1][5]+2});
        }
        else {
            dp[i][1]=min({dp[i-1][0]+1,dp[i-1][1],dp[i-1][2]+1,dp[i-1][3]+1,dp[i-1][4],dp[i-1][5]+1});
            dp[i][3]=min({dp[i-1][0]+1,dp[i-1][1]+2,dp[i-1][2]+1,dp[i-1][3],dp[i-1][4]+1,dp[i-1][5]+2});
        }
        if(en[i]!=st[i]) {
            dp[i][2]=min({dp[i-1][0]+1,dp[i-1][1]+1,dp[i-1][2],dp[i-1][3],dp[i-1][4],dp[i-1][5]+1});
        }
        else dp[i][5]=min({dp[i-1][0],dp[i-1][1],dp[i-1][2],dp[i-1][3],dp[i-1][4],dp[i-1][5]});
    }
    cout<<min({dp[n][0],dp[n][1],dp[n][2],dp[n][3],dp[n][4],dp[n][5]});
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...