Submission #1064476

#TimeUsernameProblemLanguageResultExecution timeMemory
1064476ThylOneLamps (JOI19_lamps)C++14
51 / 100
1018 ms67232 KiB
//#################### //Lamps //#################### #include <algorithm> #include<bits/stdc++.h> #include <utility> using namespace std; string A,B; const int inf = 2*1e6; #define pb push_back #define SET0 1 #define SET1 2 #define FLIP 3 void dbg(vector<int> d){ for(int i:d){ if(i==SET0)cout<<"set0 ;"; if(i==SET1)cout<<"set1 ;"; if(i==FLIP)cout<<"flip ;"; } cout<<endl; } bool apply(bool r,int m){ if(m==SET0)return 0; if(m==SET1)return 1; if(m==FLIP)return r^1; return r; } signed main(){ ios::sync_with_stdio(false); cin.tie(); int n; cin >> n; cin >> A >> B; int dp[n+1][4][4]; for(int a=0;a<=3;a++)for(int b=0;b<=3;b++)dp[n][a][b]=0; vector<pair<int,int>> t; for(int a=0;a<=3;a++)for(int b=0;b<=3;b++)t.pb(make_pair(a,b)); for(int pos = n-1;pos>=0;pos--){ for(int i1 = 0 ; i1<= 3;i1++) for(int i2 = 0 ; i2 <= 3;i2++){ dp[pos][i1][i2] = 2*n+1; for(auto p:t){ bool r = A[pos]-'0'; r = apply(r,p.first); r = apply(r,p.second); if(r!=(bool)(B[pos]-'0'))continue; int c=2; if(i1==p.second && p.first==0 && i2==0){ c=0; }else{ if(i1==p.first || p.first==0)c--; if(i2==p.second|| p.second==0)c--; } dp[pos][i1][i2] = min(dp[pos][i1][i2],c+dp[pos+1][p.first][p.second]); } } } cout<<dp[0][0][0]<<endl; 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...