제출 #1154788

#제출 시각아이디문제언어결과실행 시간메모리
1154788nguynXylophone (JOI18_xylophone)C++20
0 / 100
0 ms416 KiB
#include <bits/stdc++.h> #include "xylophone.h" using namespace std; #define ll long long #define F first #define S second #define pb push_back #define pii pair<int, int> int vis[5005]; int a[5005]; int nn; bool valid(int x) { return (x >= 1 && x <= nn && !vis[x]); } void solve(int n) { nn = n; int l = 1; int r = n; int id = 0; while(l <= r) { int mid = (l + r) / 2; if (query(1, mid) == n - 1) { r = mid - 1; id = mid; } else { l = mid + 1; } } a[id] = n; a[id + 1] = n - query(id, id + 1); a[id - 1] = n - query(id - 1, id); vis[n] = 1; vis[a[id + 1]] = 1; vis[a[id - 1]] = 1; for (int i = id + 2; i <= n; i++) { int t = query(i - 1, i); int t1 = a[i - 1] - t; int t2 = a[i - 1] + t; if (valid(t1) && valid(t2)) { int tt = query(i - 2, i); if (tt == abs(a[i - 2] - a[i - 1])) { if (a[i - 2] < a[i - 1]) { a[i] = t1; vis[a[i]] = 1; } else { a[i] = t2; vis[a[i]] = 1; } } else if (t == tt) { if (a[i - 1] > a[i - 2]) a[i] = t1; else a[i] = t2; vis[a[i]] = 1; } else { if (a[i - 1] < a[i - 2]) a[i] = t1; else a[i] = t2; vis[a[i]] = 1; } } else if (valid(t1)) { a[i] = t1; vis[a[i]] = 1; } else { a[i] = t2; vis[a[i]] = 1; } vis[a[i]] = 1; } for (int i = id - 2; i >= 1; i--) { int t = query(i, i + 1); int t1 = a[i + 1] - t; int t2 = a[i + 1] + t; if (valid(t1) && valid(t2)) { int tt = query(i, i + 2); if (tt == abs(a[i + 2] - a[i + 1])) { if (a[i + 2] - a[i + 1] > 0) { a[i] = t2; vis[a[i]] = 1; } else { a[i] = t1; vis[a[i]] = 1; } } else if (tt == t) { if (a[i + 1] < a[i + 2]) { a[i] = t2; vis[a[i]] = 1; } else { a[i] = t1; vis[a[i]] = 1; } } else { if (a[i + 1] < a[i + 2]) { a[i] = t1; vis[a[i]] = 1; } else { a[i] = t2; vis[a[i]] = 1; } } } else if (valid(t1)) { a[i] = t1; vis[a[i]] = 1; } else { a[i] = t2; vis[a[i]] = 1; } } for (int i = 1; i <= n; i++) { // assert(a[i] > 0 && a[i] <= n); // cout << a[i] << ' '; answer(i, a[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...