Submission #219471

#TimeUsernameProblemLanguageResultExecution timeMemory
219471MKopchevXylophone (JOI18_xylophone)C++14
100 / 100
1407 ms1272 KiB
#include "xylophone.h" #include <bits/stdc++.h> using namespace std; const int nmax=5e3+42; int output[nmax]; int n; bool seen[nmax]; int diff[nmax],diff_2[nmax]; /* int query(int s,int t) { cout<<s<<" "<<t<<endl; int ret; cin>>ret; return ret; } int answer(int s,int t) { cout<<"answer "<<s<<" "<<t<<endl; } */ int my_ask(int s,int t) { return query(s,t); } int maxi(vector<int> now) { int a=0; for(auto k:now) a=max(a,k); return a; } int mini(vector<int> now) { int a=nmax; for(auto k:now) a=min(a,k); return a; } bool STOP; void print() { for(int i=1;i<=n;i++) answer(i,output[i]); STOP=1; } void rec(int val,int pos) { //cout<<"rec "<<val<<" "<<pos<<endl; if(STOP)return; if(1>val||val>n)return; if(seen[val])return; seen[val]=1; output[pos]=val; if(val==n&&seen[1]==0) { seen[val]=0; return; } //cout<<"rec: ";for(int i=1;i<=n;i++)cout<<output[i]<<" ";cout<<";"<<endl;for(int i=1;i<=n;i++)cout<<seen[i]<<" ";cout<<endl; if(diff_2[pos]) { //cout<<"test_2 "<<maxi({output[pos-2],output[pos-1],output[pos]})<<" "<<mini({output[pos-2],output[pos-1],output[pos]})<<" "<<diff_2[pos]<<endl; if(maxi({output[pos-2],output[pos-1],output[pos]})-mini({output[pos-2],output[pos-1],output[pos]})!=diff_2[pos]) { seen[val]=0; return; } } if(pos==n)print(); rec(val+diff[pos],pos+1); rec(val-diff[pos],pos+1); seen[val]=0; } void solve(int N) { n=N; for(int i=1;i+1<=n;i++) diff[i]=my_ask(i,i+1); for(int i=3;i<=n;i++) diff_2[i]=my_ask(i-2,i); for(int i=1;i<=n;i++) rec(i,1); } /* int main() { solve(5); } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...