제출 #245805

#제출 시각아이디문제언어결과실행 시간메모리
245805pavelLamps (JOI19_lamps)C++14
4 / 100
101 ms57084 KiB
#include <cstdio> #include <algorithm> using namespace std; const int MAXN = 1000006; int n; char a[MAXN], b[MAXN]; int dp[MAXN][6]; int solve(int n, int opt){ int& r = dp[n][opt]; if(r == -1){ r = n; if(n!=0){ switch(opt){ case 0: if(a[n-1] == b[n-1]){ r = min(r, solve(n-1, 0)); }else{ r = min(r, solve(n-1, 1) + 1); } if(b[n-1] == '0'){ r = min(r, solve(n-1, 2)+1); r = min(r, solve(n-1, 5)+2); }else{ r = min(r, solve(n-1, 3)+1); r = min(r, solve(n-1, 4)+2); } break; case 1: if(a[n-1] == b[n-1]){ r = min(r, solve(n-1, 0)); }else{ r = min(r, solve(n-1, 1)); } if(b[n-1] == '0'){ r = min(r, solve(n-1, 2)+1); r = min(r, solve(n-1, 5)+2); }else{ r = min(r, solve(n-1, 3)+1); r = min(r, solve(n-1, 4)+2); } break; case 2: if(a[n-1] == b[n-1]){ r = min(r, solve(n-1, 0)); }else{ r = min(r, solve(n-1, 1) + 1); } if(b[n-1] == '0'){ r = min(r, solve(n-1, 2)); r = min(r, solve(n-1, 5)+2); }else{ r = min(r, solve(n-1, 3)+1); r = min(r, solve(n-1, 4)+1); } break; case 3: if(a[n-1] == b[n-1]){ r = min(r, solve(n-1, 0)); }else{ r = min(r, solve(n-1, 1) + 1); } if(b[n-1] == '0'){ r = min(r, solve(n-1, 2)+1); r = min(r, solve(n-1, 5)+1); }else{ r = min(r, solve(n-1, 3)); r = min(r, solve(n-1, 4)+2); } break; case 4: if(a[n-1] == b[n-1]){ r = min(r, solve(n-1, 0)); }else{ r = min(r, solve(n-1, 1)); } if(b[n-1] == '0'){ r = min(r, solve(n-1, 2)); r = min(r, solve(n-1, 5)+1); }else{ r = min(r, solve(n-1, 3)+1); r = min(r, solve(n-1, 4)); } break; case 5: if(a[n-1] == b[n-1]){ r = min(r, solve(n-1, 0)); }else{ r = min(r, solve(n-1, 1)); } if(b[n-1] == '0'){ r = min(r, solve(n-1, 2)+1); r = min(r, solve(n-1, 5)); }else{ r = min(r, solve(n-1, 3)); r = min(r, solve(n-1, 4)+1); } break; } } } return r; } int main(){ for(int i=0;i<MAXN;++i) for(int j=0;j<6;++j) dp[i][j] = -1; scanf("%d", &n); scanf("%s", a); scanf("%s", b); printf("%d\n", solve(n, 0)); }

컴파일 시 표준 에러 (stderr) 메시지

lamp.cpp: In function 'int main()':
lamp.cpp:118:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
lamp.cpp:119:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", a);
     ~~~~~^~~~~~~~~
lamp.cpp:120:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", b);
     ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...