Submission #805489

#TimeUsernameProblemLanguageResultExecution timeMemory
805489vjudge1Xylophone (JOI18_xylophone)C++17
100 / 100
98 ms320 KiB
#include "xylophone.h"

#include <bits/stdc++.h>
using namespace std;

static int A[5000];

int ask(int l, int r) { return query(l + 1, r + 1); }

void solve(int N) {
        A[0] = 0;
        A[1] = ask(0, 1);
        int inc = 1;
        int d = A[1];
        for (int i = 2; i < N; i++) {
                int x = ask(i - 2, i);
                int y = ask(i - 1, i);
                if (x == d) {
                        A[i] = A[i - 1] - inc * y;
                        inc = -inc;
                } else if (x == y) {
                        A[i] = A[i - 1] - inc * y;
                        inc = -inc;
                } else if (d + y == x) {
                        A[i] = A[i - 1] + inc * y;
                } else {
                        A[i] = -1;
                }
                d = y;
        }
        int mn = min_element(A, A + N) - A;
        int mx = max_element(A, A + N) - A;
        if (mn > mx) {
                for (int i = 0; i < N; i++) A[i] = -A[i];
        }
        int offset = *min_element(A, A + N) - 1;
        for (int i = 0; i < N; i++) answer(i + 1, A[i] - offset);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...