제출 #82739

#제출 시각아이디문제언어결과실행 시간메모리
82739hugo_pmXylophone (JOI18_xylophone)C++17
100 / 100
77 ms732 KiB
#include "xylophone.h" #include <vector> using namespace std; const int borne = 5005; int qq[borne][2]; int N; bool s[borne]; void build() { for (int i = 1; i < N; ++i) { qq[i][0] = query(i, i+1); if (i+1 != N) { qq[i][1] = query(i, i+2); } if (i != 0) { if (qq[i-1][1] == qq[i-1][0] + qq[i][0]) { s[i] = s[i-1]; } else { s[i] = 1 - s[i-1]; } } } } bool essai() { int mm = 1; vector<int> ans(N); vector<bool> vu(N, false); ans[0] = 1; for (int i = 1; i < N; ++i) { if (s[i]) ans[i] = ans[i-1] + qq[i][0]; else ans[i] = ans[i-1] - qq[i][0]; mm = max(ans[i], mm); } for (int i = 0; i < N; ++i) { ans[i] += (N - mm); if (ans[i] < 1 || ans[i] > N || vu[ans[i]-1] || (ans[i] == N && vu[0] == false)) return false; vu[ans[i]-1] = true; } for (int i = 0; i < N; ++i) { answer(i+1, ans[i]); } return true; } void solve(int locN) { N = locN; build(); if (essai()) return; for (int i = 0; i <= N; ++i) s[i] = 1 - s[i]; essai(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...