Submission #988977

#TimeUsernameProblemLanguageResultExecution timeMemory
988977Mr_PhXylophone (JOI18_xylophone)C++17
100 / 100
52 ms1216 KiB
#include "xylophone.h" // #include "grader.cpp" #include <bits/stdc++.h> using namespace std; static int ans[5000]; int v[5000]; void solve(int n) { int idx=-1; int l=1,r=n; int cnt=0; while(l<=r) { int mid=(l+r)/2; int value=query(mid,n); cnt++; if(value!=(n-1)) r=mid-1; else l=mid+1,idx=mid-1; } for(int i=1;i<n;i++) v[i]=query(i,i+1),cnt++; ans[idx]=1; if((idx-1)>=0) ans[idx-1]=v[idx]+1; if((idx+1)<n) ans[idx+1]=v[idx+1]+1; map<int,int>mp; mp[1]++; for(int i=idx-2;i>=0;i--) { if((ans[i+1]+v[i+1])>n) { ans[i]=ans[i+1]-v[i+1]; mp[ans[i]]++; continue; } // cout<<"HI"<<endl; if((ans[i+1]-v[i+1])<=0) { ans[i]=v[i+1]+ans[i+1]; mp[ans[i]]++; continue; } int a=ans[i+1],b=ans[i+2]; int v1=v[i+1]+ans[i+1],v2=ans[i+1]-v[i+1]; if(mp[v1]) { ans[i]=v2; continue; } if(mp[v2]) { ans[i]=v1; continue; } int value=query(i+1,i+3); cnt++; // cout<<i<<" "<<a<<" "<<b<<endl; if((v1!=a)&&(v1!=b)&&(v2!=a)&&(v2!=b)) assert((max({a,b,v1})-min({a,b,v1}))!=((max({a,b,v2})-min({a,b,v2})))); if(((max({a,b,v1})-min({a,b,v1}))==value)&&(v1!=a)&&(v1!=b)&&(v1>0)&&(v1<=n)) ans[i]=v1; else ans[i]=v2; mp[ans[i]]++; } // for(int i=0;i<n;i++)cout<<ans[i]<<" "; // cout<<endl; for(int i=idx+2;i<n;i++) { if((ans[i-1]+v[i])>n) { ans[i]=ans[i-1]-v[i]; mp[ans[i]]++; continue; } if((ans[i-1]-v[i])<=0) { ans[i]=v[i]+ans[i-1]; mp[ans[i]]++; continue; } int a=ans[i-1],b=ans[i-2]; int v1=v[i]+ans[i-1],v2=ans[i-1]-v[i]; if(mp[v1]) { ans[i]=v2; continue; } if(mp[v2]) { ans[i]=v1; continue; } int value=query(i-1,i+1); if((v1!=a)&&(v1!=b)&&(v2!=a)&&(v2!=b)) assert((max({a,b,v1})-min({a,b,v1}))!=((max({a,b,v2})-min({a,b,v2})))); if(((max({a,b,v1})-min({a,b,v1}))==value)&&(v1!=a)&&(v1!=b)) ans[i]=v1; else ans[i]=v2; mp[ans[i]]++; } // ans[0]=0; assert(cnt<=7500); for(int i=1;i<=n;i++){ // cout<<ans[i-1]<<" "; answer(i,ans[i-1]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...