Submission #113351

#TimeUsernameProblemLanguageResultExecution timeMemory
113351popovicirobertXylophone (JOI18_xylophone)C++14
100 / 100
114 ms512 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; //static int A[5000]; inline int get(int a, int b, int pa, int pb, int pc) { int bc = query(min(pb, pc), max(pb, pc)), ac = query(min(pa, pc), max(pa, pc)); if(a < b) { if(bc == ac) { return b - bc; } if(ac == abs(a - b)) { return b - bc; } return b + bc; } else { if(bc == ac) { return b + bc; } if(ac == abs(a - b)) { return b + bc; } return b - bc; } } void solve(int n) { if(n == 1) { answer(1, 1); return ; } int i; vector <int> sol(n + 1); sol[1] = 0; sol[2] = query(1, 2); for(i = 3; i <= n; i++) { sol[i] = get(sol[i - 2], sol[i - 1], i - 2, i - 1, i); } int mn = 2 * n + 1; for(i = 1; i <= n; i++) { mn = min(mn, sol[i]); } for(i = 1; i <= n; i++) { sol[i] -= mn - 1; } int a = 0, b = 0; for(i = 1; i <= n; i++) { if(sol[i] == 1) { a = i; } if(sol[i] == n) { b = i; } } if(a > b) { for(i = 1; i <= n; i++) { sol[i] = n - sol[i] + 1; } } for(i = 1; i <= n; i++) { answer(i, sol[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...