Submission #670675

#TimeUsernameProblemLanguageResultExecution timeMemory
670675rainboyChameleon's Love (JOI20_chameleon)C++17
100 / 100
38 ms380 KiB
#include "chameleon.h" #include <vector> using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; namespace C { const int N = 500; int ii[4][N * 2], cnt[4]; int ej[N * 2 + 1][3], eo[N * 2 + 1]; int mate[N * 2 + 1]; void append(int i, int j) { ej[i][eo[i]++] = j, ej[j][eo[j]++] = i; } } void Solve(int n) { for (int i = 1; i <= n * 2; i++) for (int c = 0; c < 4; c++) { C::ii[c][C::cnt[c]++] = i; if (c == 3 || Query(vector(C::ii[c], C::ii[c] + C::cnt[c])) == C::cnt[c]) break; C::cnt[c]--; } for (int a = 0; a < 4; a++) for (int h = 0; h < C::cnt[a]; h++) { int i = C::ii[a][h]; for (int b = a + 1; b < 4; b++) { int l = 0; while (l < C::cnt[b]) { vi v = vector(C::ii[b] + l, C::ii[b] + C::cnt[b]); v.push_back(i); if (Query(v) < C::cnt[b] - l + 1) { int lower = l, upper = C::cnt[b]; while (upper - lower > 1) { int r = (lower + upper) / 2; v = vector(C::ii[b] + l, C::ii[b] + r); v.push_back(i); if (Query(v) < r - l + 1) upper = r; else lower = r; } C::append(i, C::ii[b][lower]); l = upper; } else break; } } } for (int i = 1; i <= n * 2; i++) if (C::eo[i] == 1) C::mate[i] = C::ej[i][0]; else { int tmp; if (Query(vector({i, C::ej[i][0], C::ej[i][2]})) == 1) tmp = C::ej[i][0], C::ej[i][0] = C::ej[i][1], C::ej[i][1] = tmp; else if (Query(vector({i, C::ej[i][0], C::ej[i][1]})) == 1) tmp = C::ej[i][0], C::ej[i][0] = C::ej[i][2], C::ej[i][2] = tmp; } for (int i = 1; i <= n * 2; i++) if (C::eo[i] > 1) { int j = C::ej[i][1], k = C::ej[i][2]; C::mate[i] = C::eo[j] == 1 || C::ej[j][0] != i ? j : k; } for (int i = 1; i <= n * 2; i++) if (i < C::mate[i]) Answer(i, C::mate[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...