Submission #1179025

#TimeUsernameProblemLanguageResultExecution timeMemory
1179025woohyun_jngLibrary (JOI18_library)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
void Solve(int N);

namespace {
struct Judge {
    int N;
    int A[1002];
    int pos[1002];
    bool f[1002];
    int query_c;
    bool answered;
    void init() {
        query_c = 0;
        int ret = scanf("%d", &N);
        ret++;
        answered = false;
        for (int i = 0; i < N; i++)
            ret = scanf("%d", &A[i]), pos[A[i]] = i;
    }
    int query(const vector<int> &M) {
        if (query_c == 20000) {
            puts("Wrong Answer [3]");
            exit(0);
        }
        if (int(M.size()) != N) {
            puts("Wrong Answer [1]");
            exit(0);
        }
        bool all_zero = true;
        for (int i = 0; i < N; i++) {
            if (M[i] != 0 && M[i] != 1) {
                puts("Wrong Answer [2]");
                exit(0);
            }
            if (M[i] == 1)
                all_zero = false;
        }
        if (all_zero) {
            puts("Wrong Answer [2]");
            exit(0);
        }
        memset(f, 0, sizeof(f));
        for (int i = 0; i < N; i++)
            if (M[i])
                f[pos[i + 1]] = true;
        bool las = false;
        int r = 0;
        for (int i = 0; i < N; i++) {
            if (las == false && f[i] == true)
                r++;
            las = f[i];
        }
        query_c++;
        return r;
    }
    void answer(const vector<int> &res) {
        bool f1 = true, f2 = true;
        if (int(res.size()) != N) {
            puts("Wrong Answer [4]");
            exit(0);
        }
        if (answered) {
            puts("Wrong Answer [7]");
            exit(0);
        }
        answered = true;
        memset(f, 0, sizeof(f));
        for (int i = 0; i < N; i++) {
            if (res[i] <= 0 || res[i] > N) {
                puts("Wrong Answer [5]");
                exit(0);
            }
            if (f[res[i]]) {
                puts("Wrong Answer [6]");
                exit(0);
            }
            f[res[i]] = true;
        }
        for (int i = 0; i < N; i++) {
            f1 &= A[i] == res[i];
            f2 &= A[i] == res[N - i - 1];
        }
        if (!f1 && !f2) {
            puts("Wrong Answer [8]");
            exit(0);
        }
    }
    void end() {
        if (!answered)
            puts("Wrong Answer [7]");
        else
            printf("Accepted : %d\n", query_c);
    }
} judge;
} // namespace

int Query(const vector<int> &M) {
    return judge.query(M);
}
void Answer(const vector<int> &res) {
    judge.answer(res);
}

vector<int> ans;
bool chk[1001];

int N;

int query(vector<int> &Q) {
    int cnt = accumulate(Q.begin(), Q.end(), 0);
    return cnt - Query(Q);
}

int get(int X, vector<int> arr) {
    int S = arr.size(), A, B;
    if (S == 1)
        return arr[0];

    if (X == 0) {
        for (int i : arr)
            cout << i << " ";
        cout << "sex\n";
    }

    vector<int> L, R, T(N, 0);
    for (int i = 0; i < S / 2; i++)
        L.push_back(arr[i]), T[arr[i]] = 1;
    for (int i = S / 2; i < S; i++)
        R.push_back(arr[i]);

    A = query(T);
    T[X] = 1, B = query(T);

    if (B - A >= 1)
        return get(X, L);
    else
        return get(X, R);
}

void Solve(int n) {
    N = n;
    vector<int> Q(N, 1);

    if (N == 1) {
        ans.push_back(1);
        Answer(ans);
        return;
    }

    for (int i = 0; i < N; i++) {
        Q[i] = 0;
        if (query(Q) == N - 2) {
            ans.push_back(i), chk[i] = true;
            break;
        }
        Q[i] = 1;
    }

    for (int i = 1; i < N; i++) {
        Q.clear();
        for (int j = 0; j < N; j++) {
            if (chk[j])
                continue;
            Q.push_back(j);
        }
        ans.push_back(get(ans[i - 1], Q)), chk[ans[i]] = true;
    }

    for (int i = 0; i < N; i++) {
        cout << ans[i] << " ";
        ans[i]++;
    }

    Answer(ans);
}

int main() {
    judge.init();
    Solve(judge.N);
    judge.end();
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccg93EHM.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccSZLwiE.o:library.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccg93EHM.o: in function `Answer(std::vector<int, std::allocator<int> > const&)':
grader.cpp:(.text+0x0): multiple definition of `Answer(std::vector<int, std::allocator<int> > const&)'; /tmp/ccSZLwiE.o:library.cpp:(.text+0x180): first defined here
/usr/bin/ld: /tmp/ccg93EHM.o: in function `Query(std::vector<int, std::allocator<int> > const&)':
grader.cpp:(.text+0x240): multiple definition of `Query(std::vector<int, std::allocator<int> > const&)'; /tmp/ccSZLwiE.o:library.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status