제출 #129195

#제출 시각아이디문제언어결과실행 시간메모리
129195MohamedAhmed04Lamps (JOI19_lamps)C++14
4 / 100
259 ms104404 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 1e6 + 5 ; int dp[MAX][2][2][2] ; int arr[MAX] , arr2[MAX] ; int n ; int solve(int idx , int t , int t0 , int t1) { if(idx == n) return 0 ; int &ret = dp[idx][t][t0][t1] ; if(ret != -1) return ret ; if (t0 == 1 && t1 == 1) while (1) ; ret = 1e9 ; if(t) { if(arr[idx] != arr2[idx]) { if(t0 && arr2[idx] == 1) ret = solve(idx+1 , t , 0 , t1) ; else if(t1 && arr2[idx] == 0) ret = solve(idx+1 , t , t0 , 0) ; else { ret = solve(idx+1 , t , t0 , t1) ; } return ret ; } else { int choice1 = 1e9 , choice2 = 1e9 ; /*if(arr2[idx] == 0) { choice1 = solve(idx+1 , 0 , 1 , 0) + 1; choice2 = solve(idx+1 , 1 , 1 , 0) + 1; ret = min(choice1 , choice2) ; return ret ; } else { choice1 = solve(idx+1 , 0 , 0 , 1) + 1 ; choice2 = solve(idx+1 , 1 , 0 , 1) + 1 ; ret = min(choice1 , choice2) ; return ret ; }*/ if(arr[idx] == 0) { if(t0 == 1) choice1 = solve(idx+1 , t , t0 , t1) ; else { choice1 = solve(idx+1 , 0 , 0 , 0) ; choice2 = solve(idx+1 , 1 , 1 , 0) + 1; } ret = min(choice1 , choice2) ; return ret ; } else { if(t1 == 1) choice1 = solve(idx+1 , t , t0 , t1) ; else { choice1 = solve(idx+1 , 0 , 0, 0) ; choice2 = solve(idx+1 , 1 , 0 , 1) + 1 ; } ret = min(choice1 , choice2) ; return ret ; } } } if(t1) { if(arr2[idx] == 1) ret = solve(idx+1 , t , t0 , t1) ; else { if(arr[idx] == arr2[idx]) ret = solve(idx+1 , 0 , 0 , 0) ; else { int choice1 = solve(idx+1 , 1 , 0 , 0) + 1 ; int choice2 = solve(idx+1 , 0 , 1 , 0) + 1 ; //int choice3 = solve(idx+1 , 1 , 1 , 0) + 2 ; ret = min(choice1 , choice2) ; } return ret ; } return ret ; } if(t0) { if(arr2[idx] == 0) ret = solve(idx+1 , t , t0 , t1) ; else { if(arr[idx] == arr2[idx]) ret = solve(idx+1 , 0 , 0 , 0) ; else { int choice1 = solve(idx+1 , 1 , 0 , 0) + 1 ; int choice2 = solve(idx+1 , 0 , 0 , 1) + 1 ; //int choice3 = solve(idx+1 , 1 , 1 , 0) + 2 ; ret = min(choice1 , choice2) ; } return ret ; } return ret ; } if(arr[idx] == arr2[idx]) ret = solve(idx+1 , t , t0 , t1) ; else { int choice1 = solve(idx+1 , 1 , 0 , 0) + 1 ; int choice2 = 1e9 ; if(arr2[idx] == 0) choice2 = solve(idx+1 , 0 , 1 , 0) + 1 ; else choice2 = solve(idx+1 , 0 , 0 , 1) + 1 ; ret = min(choice1 , choice2) ; } return ret ; } int main() { cin>>n ; string s1 , s2 ; cin>>s1>>s2 ; for(int i = 0 ; i < n ; ++i) arr[i] = (s1[i] - '0') ; for(int i = 0 ; i < n ; ++i) arr2[i] = (s2[i] - '0') ; memset(dp , -1 , sizeof(dp)) ; return cout<<solve(0 , 0 , 0 , 0)<<"\n" , 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...