Submission #113351

#TimeUsernameProblemLanguageResultExecution timeMemory
113351popovicirobertXylophone (JOI18_xylophone)C++14
100 / 100
114 ms512 KiB
#include "xylophone.h"
#include <bits/stdc++.h>

using namespace std;

//static int A[5000];


inline int get(int a, int b, int pa, int pb, int pc) {

    int bc = query(min(pb, pc), max(pb, pc)), ac = query(min(pa, pc), max(pa, pc));

    if(a < b) {
        if(bc == ac) {
            return b - bc;
        }
        if(ac == abs(a - b)) {
            return b - bc;
        }
        return b + bc;
    }
    else {
        if(bc == ac) {
            return b + bc;
        }
        if(ac == abs(a - b)) {
            return b + bc;
        }
        return b - bc;
    }
}

void solve(int n) {

    if(n == 1) {
        answer(1, 1);
        return ;
    }

    int i;

    vector <int> sol(n + 1);

    sol[1] = 0;
    sol[2] = query(1, 2);

    for(i = 3; i <= n; i++) {
        sol[i] = get(sol[i - 2], sol[i - 1], i - 2, i - 1, i);
    }

    int mn = 2 * n + 1;

    for(i = 1; i <= n; i++) {
        mn = min(mn, sol[i]);
    }

    for(i = 1; i <= n; i++) {
        sol[i] -= mn - 1;
    }

    int a = 0, b = 0;

    for(i = 1; i <= n; i++) {
        if(sol[i] == 1) {
            a = i;
        }
        if(sol[i] == n) {
            b = i;
        }
    }

    if(a > b) {
        for(i = 1; i <= n; i++) {
            sol[i] = n - sol[i] + 1;
        }
    }

    for(i = 1; i <= n; i++) {
        answer(i, sol[i]);
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...