Submission #231948

#TimeUsernameProblemLanguageResultExecution timeMemory
231948oolimryLamps (JOI19_lamps)C++14
100 / 100
126 ms4812 KiB
#include <bits/stdc++.h> #define SKIP 0 #define OFF 1 #define ON 2 #define SKIPXOR 3 #define OFFXOR 4 #define ONXOR 5 #define oper int using namespace std; int dist(oper a, oper b){ int ans = 0; ///If the skip/off/on is different, and b is not skip if(a % 3 != b % 3 && b % 3 != 0) ans++; ///if XOR is taken if(a <= 2 && b >= 3) ans++; return ans; } int conv(int state, oper o){ switch(o){ case SKIP: return state; case OFF: return 0; case ON: return 1; case SKIPXOR: return state^1; case OFFXOR: return 1; case ONXOR: return 0; default: return -1; } } bitset<1000005> A; bitset<1000005> B; int pre[6]; int dp[6]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; string SA, SB; cin >> SA >> SB; for(int i = 0;i < n;i++){ A[i] = (SA[i] == '1'); B[i] = (SB[i] == '1'); } fill(dp,dp+6,10234567); dp[0] = 0; oper operations[6] = {SKIP, OFF, ON, SKIPXOR, OFFXOR, ONXOR}; for(int i = 0;i < n;i++){ swap(dp, pre); fill(dp,dp+6,10234567); for(oper curOp : operations){ if(conv(A[i], curOp) != B[i]) continue; for(oper preOp : operations){ dp[curOp] = min(dp[curOp], pre[preOp] + dist(preOp, curOp)); } } } cout << min({dp[0],dp[1],dp[2],dp[3],dp[4],dp[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...