제출 #245804

#제출 시각아이디문제언어결과실행 시간메모리
245804pavelLamps (JOI19_lamps)C++14
4 / 100
137 ms59128 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;
        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:116:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
lamp.cpp:117:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", a);
     ~~~~~^~~~~~~~~
lamp.cpp:118: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...