Submission #321769

#TimeUsernameProblemLanguageResultExecution timeMemory
321769lohachoXylophone (JOI18_xylophone)C++14
100 / 100
149 ms876 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; using LL = long long; const int MOD = (int)1e9 + 7; int A[5004]; int val[5004][3]; int ans[5004]; map<int, int> chk; void out(int N){ for(int i = 1; i <= N; ++i){ answer(i, ans[i]); } } void solve(int N) { for(int i = 1; i <= N; ++i){ for(int j = i + 1; j <= min(N, i + 2); ++j){ val[i][j - i] = query(i, j); } } ans[2] = val[1][1]; int low = MOD; for(int i = 3; i <= N; ++i){ int bu = (ans[i - 1] - ans[i - 2]) / abs(ans[i - 1] - ans[i - 2]); if(val[i - 2][1] + val[i - 1][1] != val[i - 2][2]){ bu *= -1; } ans[i] = ans[i - 1] + val[i - 1][1] * bu; } for(int i = 1; i <= N; ++i){ low = min(low, ans[i]); } int cf = 1; for(int i = 1; i <= N; ++i){ ans[i] += -low + 1; if(ans[i] < 1 || ans[i] > N || chk[ans[i]]){ cf = 0; break; } chk[ans[i]] = 1; } if(cf){ for(int i = 1; i <= N; ++i){ if(ans[i] == 1){ out(N); return; } if(ans[i] == N){ break; } } } ans[1] = 0; ans[2] = -val[1][1]; low = MOD; for(int i = 3; i <= N; ++i){ int bu = (ans[i - 1] - ans[i - 2]) / abs(ans[i - 1] - ans[i - 2]); if(val[i - 2][1] + val[i - 1][1] != val[i - 2][2]){ bu *= -1; } ans[i] = ans[i - 1] + val[i - 1][1] * bu; } for(int i = 1; i <= N; ++i){ low = min(low, ans[i]); } for(int i = 1; i <= N; ++i){ ans[i] += -low + 1; } out(N); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...