Submission #1117564

#TimeUsernameProblemLanguageResultExecution timeMemory
1117564Zero_OPLamps (JOI19_lamps)C++14
100 / 100
46 ms16472 KiB
#include <bits/stdc++.h> using namespace std; int call(int state, int op){ if(op == 0) return state; if(op == 1) return 0; if(op == 2) return 1; assert(false); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; string A, B; cin >> A >> B; for(auto& c : A) c -= '0'; for(auto& c : B) c -= '0'; vector<array<int, 3>> dp(N + 1, {N, N, N}); //0 : keep //1 : turn off //2 : turn on dp[0][0] = 0; for(int i = 1; i <= N; ++i){ for(int pre = 0; pre < 3; ++pre){ for(int cur = 0; cur < 3; ++cur){ int need = dp[i - 1][pre] + (pre != cur && cur != 0); if((i == 1 || (call(A[i - 2], pre) == B[i - 2])) && call(A[i - 1], cur) != B[i - 1]){ ++need; } dp[i][cur] = min(dp[i][cur], need); } } } cout << min({dp[N][0], dp[N][1], dp[N][2]}); return 0; } /* Nhận xét 1 : Thực hiện trước tất cả các thao tác ON/OFF trước khi TOGGLE, chứng minh trực giác vì ON/OFF giống như xóa thông tin của cột trước khi thực hiện, còn TOGGLE là giữ lại thông tin đó theo các khác Nhận xét 2 : Tồn tại cách giải tối ưu thỏa mãn : - Thực hiện tất cả thao tác ON/OFF trước khi TOGGLE - Các đoạn thực hiện ON/OFF không chồng lên nhau - Các đoạn thực hiện ON/OFF không liền kề nhau */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...