제출 #20540

#제출 시각아이디문제언어결과실행 시간메모리
20540CYI (#35)Can polan into space? (OJUZ11_space)C++14
0 / 100
139 ms12052 KiB
#include<cstdio>
#include<algorithm>
using namespace std;
int n, r[200001], p[200001],cnt, fr[200001][4];
long long dp[200001][4],res;
void f(int x, int y) {
    if (!x) return;
    r[x] = y;
    f(x - 1, fr[x][y]);
}
int main() {
    int a, b, c;
    scanf("%d%d%d%d", &n,&a,&b,&c);
    if (n == 1) {
        printf("%d\n1", a);
        return 0;
    }
    dp[1][0] = a;
    dp[1][2] = b;
    dp[1][1] = dp[1][3] = -1e15;
    for (int i = 2; i <= n; i++) {
        scanf("%d%d%d", &a, &b, &c);
        if (dp[i - 1][2] > dp[i - 1][3]) {
            dp[i][0] = dp[i - 1][2] + a;
            fr[i][0] = 2;
            dp[i][2] = dp[i - 1][2] + b;
            fr[i][2] = 2;
        }
        else {
            dp[i][0] = dp[i - 1][3] + a;
            fr[i][0] = 3;
            dp[i][2] = dp[i - 1][3] + b;
            fr[i][2] = 3;
        }
        if (dp[i - 1][0] > dp[i - 1][1]) {
            dp[i][1] = dp[i - 1][0] + b;
            fr[i][1] = 0;
            dp[i][3] = dp[i - 1][0] + c;
            fr[i][3] = 0;
        }
        else {
            dp[i][1] = dp[i - 1][1] + b;
            fr[i][1] = 1;
            dp[i][3] = dp[i - 1][1] + c;
            fr[i][3] = 1;
        }
    }
    if (dp[n][0] > dp[n][1]) f(n, 0),res=dp[n][0];
    else f(n, 1), res = dp[n][1];
    for (int i = 1; i <= n; i++) if (!r[i]) p[i] = ++cnt;
    for (int i = 1; i <= n; i++) if (r[i] == 1) p[i] = ++cnt;
    for (int i = n; i >= 1; i--) if (r[i] == 2) p[i] = ++cnt;
    for (int i = 1; i <= n; i++) if (r[i] == 3) p[i] = ++cnt;
    printf("%lld\n", res);
    for (int i = 1; i <= n; i++) printf("%d ", p[i]);
    return 0;
}

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

space.cpp: In function 'int main()':
space.cpp:13:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d%d", &n,&a,&b,&c);
                                   ^
space.cpp:22:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d", &a, &b, &c);
                                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...