Submission #361196

#TimeUsernameProblemLanguageResultExecution timeMemory
361196BartolMXylophone (JOI18_xylophone)C++17
100 / 100
181 ms748 KiB
#include "xylophone.h"
#include <bits/stdc++.h>

using namespace std;

int n;
static int A[5000];
int p[5005], bio[5005];
int dva[5005], tri[5005];

int ok(int x) {
    if (x<=0 || x>n) return 0;
    return !bio[x];
}

int resi(int a, int b, int x, int y) {
    int c=b+x;
    int maxi=max(a, c), mini=min(a, b);
    if (ok(c) && maxi-mini==y) return c;
    c=b-x;
    maxi=max(a, b), mini=min(a, c);
    if (ok(c) && maxi-mini==y) return c;
    return -1;
}

void dodaj(int i, int x) {
    if (i<1 || i>n) return;
    p[i]=x;
    bio[x]=1;
}

void kraj() {
    for (int i=1; i<=n; ++i) answer(i, p[i]);
}

void solve(int N) {
    n=N;
    for (int i=1; i<n; ++i) {
        dva[i]=query(i, i+1);
        if (i+2<=n) tri[i]=query(i, i+2);
    }
    for (int poc=1; poc<=n; ++poc) {
        memset(bio, 0, sizeof bio);
        dodaj(poc, 1);
        dodaj(poc-1, dva[poc-1]+1);
        dodaj(poc+1, dva[poc]+1);
        int fl=1;
        for (int i=poc-2; i>0; --i) {
            int x=resi(p[i+2], p[i+1], dva[i], tri[i]);
            if (!ok(x)) {
                fl=0; break;
            }
            dodaj(i, x);
        }
        for (int i=poc+2; i<=n; ++i) {
            int x=resi(p[i-2], p[i-1], dva[i-1], tri[i-2]);
            if (!ok(x)) {
                fl=0; break;
            }
            dodaj(i, x);
        }
        if (fl) {
            kraj();
            return;
        }
    }
}

Compilation message (stderr)

xylophone.cpp:7:12: warning: 'A' defined but not used [-Wunused-variable]
    7 | static int A[5000];
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...