Submission #1282499

#TimeUsernameProblemLanguageResultExecution timeMemory
1282499am_aadvikMonster Game (JOI21_monster)C++20
Compilation error
0 ms0 KiB
//#define SUBMIT 1 #define _CRT_SECURE_NO_WARNINGS #include <vector> #include<iostream> using namespace std; #ifdef SUBMIT #include "monster.h" #else #include <cstdio> #include <cstdlib> namespace { using std::exit; using std::fprintf; using std::printf; using std::scanf; constexpr int Q_MAX = 25'000; constexpr int N_MAX = 1'000; int N; int S[N_MAX]; int query_count = 0; void WrongAnswer(int code) { printf("Wrong Answer [%d]\n", code); exit(0); } } bool Query(int a, int b) { if (++query_count > Q_MAX) WrongAnswer(6); if (a < 0 || N <= a || b < 0 || N <= b) WrongAnswer(4); if (a == b) WrongAnswer(5); return (S[a] > S[b]) ^ (abs(S[a] - S[b]) == 1); } vector<int> Solve(int n); int main() { if (scanf("%d", &N) != 1) { fprintf(stderr, "Error while reading.\n"); exit(1); } for (int i = 0; i < N; i++) { if (scanf("%d", S + i) != 1) { fprintf(stderr, "Error while reading.\n"); exit(1); } } std::vector<int> T = Solve(N); if ((int)T.size() != N) WrongAnswer(1); for (int i = 0; i < N; i++) { if (T[i] < 0 || N <= T[i]) WrongAnswer(2); if (T[i] != S[i]) WrongAnswer(3); } printf("Accepted: %d\n", query_count); return 0; } #endif //main code #include <random> bool q(int a, int b) { return Query(a, b); } vector<int> rem(vector<int>& a, int m) { vector<int> v; for (auto x : a) if (x != m) v.push_back(x); return v; } vector<int> qsort(vector<int> a) { if (a.size() <= 1) return a; int n = a.size(); random_device rd; mt19937 gd(rd()); uniform_int_distribution<> dd(0, n - 1); int p = 0; vector<int> l, r, sa; for (int i = 0; i < n; ++i) if (i != p) { auto v = q(a[p], a[i]); if (v) l.push_back(a[i]); else r.push_back(a[i]); } int wl = (l.empty() ? -1 : l[0]), lr = (r.empty() ? -1 : r[0]); for (int i = 1; i < l.size(); ++i) wl = (q(l[i], l[i - 1]) ? l[i] : l[i - 1]); for (int i = 1; i < r.size(); ++i) lr = (q(r[i], r[i - 1]) ? r[i - 1] : r[i]); l = rem(l, wl), r = rem(r, lr); l = qsort(l), r = qsort(r); for (auto x : l) sa.push_back(x); if (lr != -1) sa.push_back(lr); sa.push_back(a[p]); if (wl != -1) sa.push_back(wl); for (auto x : r) sa.push_back(x); return sa; } vector<int> Solve(int n) { #ifdef SUBMIT if (n == 200) { vector<int> win(n), a(n); for (int i = 0; i < n; ++i) for (int j = i + 1; j < n; ++j) { auto x = q(i, j); if (x) ++win[i]; else ++win[j]; } vector<int> w1, wn; for (int i = 0; i < n; ++i) { if (win[i] == 1) w1.push_back(i); else if (win[i] == (n - 2)) wn.push_back(i); else a[i] = win[i]; } auto r1 = q(w1[0], w1[1]); if (r1) a[w1[0]] = 0, a[w1[1]] = 1; else a[w1[0]] = 1, a[w1[1]] = 0; auto rn = q(wn[0], wn[1]); if (rn) a[wn[0]] = n - 2, a[wn[1]] = n - 1; else a[wn[0]] = n - 1, a[wn[1]] = n - 2; return a; } #endif vector<int> a; for (int i = 0; i < n; ++i) a.push_back(i); auto res = qsort(a); for (int i = 0; i < n; ++i) a[res[i]] = i; return a; }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccY9ltvL.o: in function `Query(int, int)':
stub.cpp:(.text+0x0): multiple definition of `Query(int, int)'; /tmp/cc9UbXvQ.o:monster.cpp:(.text+0x30): first defined here
/usr/bin/ld: /tmp/ccY9ltvL.o: in function `main':
stub.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc9UbXvQ.o:monster.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status