Submission #127613

#TimeUsernameProblemLanguageResultExecution timeMemory
127613Markomafko972Xylophone (JOI18_xylophone)C++14
100 / 100
121 ms568 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; void solve(int n) { int t[5002]; memset(t, 0, sizeof t); int q[5][5002]; memset(q, 0, sizeof q); q[0][2] = query(1, 2); t[2] = q[0][2]; int e = min(t[1], t[2]); for (int i = 3; i <= n; i ++) { q[0][i] = query(i-1, i); q[1][i] = query(i-2, i); if (t[i-2] < t[i-1]) { if (q[0][i] == q[1][i] || q[0][i-1] == q[1][i]) t[i] = t[i-1] - q[0][i]; else t[i] = t[i-1] + q[0][i]; } else { if (q[0][i] == q[1][i] || q[0][i-1] == q[1][i]) t[i] = t[i-1] + q[0][i]; else t[i] = t[i-1] - q[0][i]; } e = min(e, t[i]); } int bio[5002]; memset(bio, 0, sizeof bio); int p = 0; int ne = 0; for (int i = 1; i <= n; i ++) { t[i] -= e-1; if (t[i] >= 1 && t[i] <= n) bio[t[i]] ++; if (t[i] == 1) p = 1; if (t[i] == n && p == 0) { ne = 1; } } int da = 1; for (int i = 1; i <= n; i ++) { if (bio[i] != 1) { da = 0; break; } } if (da == 1 && ne == 0) { for (int i = 1; i <= n; i ++) { answer(i, t[i]); } return; } memset(t, 0, sizeof t); t[2] = -q[0][2]; e = min(t[1], t[2]); for (int i = 3; i <= n; i ++) { if (t[i-2] < t[i-1]) { if (q[0][i] == q[1][i] || q[0][i-1] == q[1][i]) t[i] = t[i-1] - q[0][i]; else t[i] = t[i-1] + q[0][i]; } else { if (q[0][i] == q[1][i] || q[0][i-1] == q[1][i]) t[i] = t[i-1] + q[0][i]; else t[i] = t[i-1] - q[0][i]; } e = min(e, t[i]); } memset(bio, 0, sizeof bio); p = 0; ne = 0; for (int i = 1; i <= n; i ++) { t[i] -= e-1; if (t[i] >= 1 && t[i] <= n) bio[t[i]] ++; if (t[i] == 1) p = 1; if (t[i] == n && p == 0) { ne = 1; } } da = 1; for (int i = 1; i <= n; i ++) { if (bio[i] != 1) { da = 0; break; } } if (da == 1 && ne == 0) { for (int i = 1; i <= n; i ++) { answer(i, t[i]); } return; } assert(0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...