Submission #643798

#TimeUsernameProblemLanguageResultExecution timeMemory
643798kausarmeXylophone (JOI18_xylophone)C++14
100 / 100
109 ms336 KiB
#include "xylophone.h"

void solve(int N) {
    int A[N];
    A[0] = 0;
    int D[N - 1]; // berisi selisih A[i] dengan A[i-1]
    int T[N - 2]; //  erisi selisih A[i] dengan A[i-1]
    for(int i = 1; i < N; i++) {
        D[i - 1] = query(i, i + 1);
    }
    for(int i = 2; i < N; i++) {
        T[i - 2] = query(i - 1, i + 1);
    }
    A[1] = D[0];
    bool up = true; // cek menaik atau tidak
    for(int i = 2; i < N; i++) {
        if(D[i - 2] + D[i - 1] != T[i - 2]) {
            up = !up;
        }
        A[i] = A[i - 1] + D[i - 1] * (up ? 1 : - 1);
    }

    int maks = 0, mins = 0;
    int maksPos = 0, minsPos = 0;


    // cek posisi 1 dan N
    for(int i = 1; i < N; i++) {
        if(A[i] > maks) {
            maks = A[i];
            maksPos = i;
        }
        if(A[i] < mins) {
            mins = A[i];
            minsPos = i;
        }
    }
    if(minsPos < maksPos) {
        for(int i = 0; i < N; i++) {
            A[i] = A[i] - mins + 1;
        }
    } else {
        for(int i = 0; i < N; i++) {
            A[i] =  maks - A[i] + 1;
        }
    }

    // Answer
    for(int i = 0; i < N; i++) {
        answer(i+1,A[i]);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...