Submission #503435

#TimeUsernameProblemLanguageResultExecution timeMemory
503435amunduzbaevXylophone (JOI18_xylophone)C++14
100 / 100
323 ms472 KiB
#include "xylophone.h" #include "bits/stdc++.h" using namespace std; #ifndef EVAL #include "grader.cpp" #endif //~ static int A[5000]; void solve(int n){ vector<int> dd(n + 1); for(int i=2;i<=n;i++){ dd[i] = query(i-1, i); } vector<int> t(n + 1); for(int i=3;i<=n;i++){ t[i] = query(i-2, i); } vector<int> d(n + 1); auto go = [&](){ for(int i=3;i<=n;i++){ if(t[i] == dd[i-1]){ if(d[i-1] < 0) d[i] = dd[i]; else d[i] = -dd[i]; } else if(t[i] == dd[i]){ if(d[i-1] < 0) d[i] = dd[i]; else d[i] = -dd[i]; } else { if(d[i-1] < 0) d[i] = -dd[i]; else d[i] = dd[i]; } } }; d[2] = dd[2], go(); auto get = [&](int s){ vector<int> a(n + 1); a[1] = s; for(int i=2;i<=n;i++){ a[i] = a[i-1] + d[i]; } return a; }; for(int s=1;s<=n;s++){ vector<int> a = get(s), cnt(n + 1); bool ok = 1; for(int i=1;i<=n;i++){ if(a[i] < 1 || a[i] > n || cnt[a[i]]) { ok = 0; break; } if(a[i] == n && !cnt[1]) { ok = 0; break; } cnt[a[i]] = 1; } if(!ok) continue; //~ for(int i=1;i<=n;i++) cout<<a[i]<<" "; //~ cout<<"\n"; for(int i=1;i<=n;i++){ answer(i, a[i]); } } d[2] = -dd[2], go(); for(int s=1;s<=n;s++){ vector<int> a = get(s), cnt(n + 1); bool ok = 1; for(int i=1;i<=n;i++){ if(a[i] < 1 || a[i] > n || cnt[a[i]]) { ok = 0; break; } if(a[i] == n && !cnt[1]) { ok = 0; break; } cnt[a[i]] = 1; } if(!ok) continue; //~ for(int i=1;i<=n;i++) cout<<a[i]<<" "; //~ cout<<"\n"; for(int i=1;i<=n;i++){ answer(i, a[i]); } } //~ assert(0); } /* 5 2 1 5 3 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...