Submission #1156737

#TimeUsernameProblemLanguageResultExecution timeMemory
1156737ZflopXylophone (JOI18_xylophone)C++20
100 / 100
34 ms20752 KiB
#include <bits/stdc++.h> #include "xylophone.h" using namespace std; int v[10000][2],q[5001][5001],cnt[5001]; void solve(int N) { v[1][0] = 1; q[1][2] = query(1,2); v[2][0] = 1 + q[1][2]; v[1][1] = N; v[2][1] = N - q[1][2]; for (int i = 3; i <= N;++i) { q[i - 2][i] = query(i - 2,i); q[i - 1][i] = query(i - 1,i); } for (int b = 0; b < 2;++b) for (int i = 3; i <= N;++i) { int a = q[i - 2][i]; int d = abs(v[i - 1][b] - v[i - 2][b]); if (d == a) { int dif = q[i - 1][i]; if (v[i - 1][b] > v[i - 2][b]) { v[i][b] = v[i - 1][b] - dif; } else v[i][b] = v[i - 1][b] + dif; } else { int r = abs(v[i - 1][b] - v[i - 2][b]); int dif = q[i - 1][i]; if (dif + r == a) { if (v[i - 1][b] > v[i - 2][b]) v[i][b] = v[i - 1][b] + dif; else v[i][b] = v[i - 1][b] - dif; } else { if (v[i - 2][b] > v[i - 1][b]) v[i][b] = v[i - 1][b] + dif; else v[i][b] = v[i - 1][b] - dif; } } } for (int b = 0; b < 2;++b) { int mn = v[1][b]; for (int i = 1; i <= N;++i) mn = min(mn,v[i][b]); for (int i = 1; i <= N;++i) { v[i][b] -= (mn - 1); //cout << v[i][b] << ' '; cnt[v[i][b]]++; if (v[i][b] == N) { if (cnt[1] == 0) { cnt[N] = 0; } } } bool ok = true; for (int i = 1; i <= N;++i) { if (cnt[i] == 0) { ok = false; } cnt[i] = 0; } if (ok) { for (int i = 1; i <= N;++i) answer(i,v[i][b]); return; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...