Submission #654522

#TimeUsernameProblemLanguageResultExecution timeMemory
654522CDuongXylophone (JOI18_xylophone)C++17
0 / 100
0 ms208 KiB
#include<bits/stdc++.h> #include "xylophone.h" using namespace std; int a[5005], res[5005]; void solve(int n) { int l = 1, r = n; while(l < r) { int mid = (l + r) >> 1; int tmp = query(mid, n); if(tmp != n - 1) r = mid - 1; else l = mid + 1; } res[l] = 1; a[1] = 1; if(l > 1) { res[l - 1] = 1 + query(l - 1, l); a[res[l - 1]] = 1; for(int i = l - 2; i >= 1; --i) { int tmp = query(i, i + 1); if(res[i + 1] + tmp > n || a[res[i + 1] + tmp]) { res[i] = res[i + 1] - tmp; a[res[i]] = 1; continue; } if(res[i + 1] + tmp < 1 || a[res[i + 1] - tmp]) { res[i] = res[i + 1] + tmp; a[res[i]] = 1; continue; } int tmp2 = query(i, i + 2); if(tmp2 == tmp || tmp2 == abs(res[i + 1] - res[i + 2])) { if(res[i + 1] < res[i + 2]) res[i] = res[i + 1] + tmp; else res[i] = res[i + 1] - tmp; } else { if(res[i + 1] < res[i + 2]) res[i] = res[i + 1] - tmp; else res[i] = res[i + 1] + tmp; } a[res[i]] = 1; } } if(l < n) { res[l + 1] = 1 + query(l, l + 1); a[res[l + 1]] = 1; for(int i = l + 2; i <= n; ++i) { int tmp = query(i - 1, i); if(res[i - 1] + tmp > n || a[res[i - 1] + tmp]) { res[i] = res[i - 1] - tmp; a[res[i]] = 1; continue; } if(res[i + 1] + tmp < 1 || a[res[i - 1] - tmp]) { res[i] = res[i - 1] + tmp; a[res[i]] = 1; continue; } int tmp2 = query(i - 2, i); if(tmp2 == tmp || tmp2 == abs(res[i - 1] - res[i - 2])) { if(res[i - 1] < res[i - 2]) res[i] = res[i - 1] + tmp; else res[i] = res[i - 1] - tmp; } else { if(res[i - 1] < res[i - 2]) res[i] = res[i - 1] - tmp; else res[i] = res[i - 1] + tmp; } a[res[i]] = 1; } } for(int i = 1; i <= n; ++i) answer(i, res[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...