Submission #996079

#TimeUsernameProblemLanguageResultExecution timeMemory
996079kustizusXylophone (JOI18_xylophone)C++17
100 / 100
82 ms988 KiB
#include <bits/stdc++.h> #include "xylophone.h" using namespace std; const int N=5e3; int a[N+5],x[N+5]; void solve(int n){ vector <pair<int,int>> v; int dist=query(1,2); for (int i=3;i<=n;++i){ int x=query(i-1,i); int y=query(i-2,i); v.push_back({x,y}); } a[1]=1e9; a[2]=1e9+dist; x[1]=x[2]=0; int bruh=min(a[1],a[2]); for (int i=3;i<=n;++i){ x[i]=0; int d=a[i-1]+v[i-3].first; if (max(d,max(a[i-1],a[i-2]))-min(d,min(a[i-1],a[i-2]))==v[i-3].second) a[i]=d; else a[i]=a[i-1]-v[i-3].first; bruh=min(bruh,a[i]); } --bruh; for (int i=1;i<=n;++i) a[i]-=bruh,x[a[i]]=i; bool ok=true; for (int i=1;i<=n;++i) if (!x[i]) ok=false; if (x[1]>x[n]) ok=false; if (ok){ for (int i=1;i<=n;++i) answer(i,a[i]); fflush(stdout); return; } a[1]=1e9; a[2]=1e9-dist; bruh=min(a[1],a[2]); for (int i=3;i<=n;++i){ x[i]=0; int d=a[i-1]+v[i-3].first; if (max(d,max(a[i-1],a[i-2]))-min(d,min(a[i-1],a[i-2]))==v[i-3].second) a[i]=d; else a[i]=a[i-1]-v[i-3].first; bruh=min(bruh,a[i]); } --bruh; for (int i=1;i<=n;++i) a[i]-=bruh; for (int i=1;i<=n;++i) answer(i,a[i]); fflush(stdout); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...