제출 #69233

#제출 시각아이디문제언어결과실행 시간메모리
69233edisonhello철로 (IOI14_rail)C++14
30 / 100
101 ms820 KiB
#include<bits/stdc++.h> using namespace std; int disf0[5005],disfo[5005]; #ifdef WEAK int getDistance(int i,int j){ cout<<"Q "<<i<<" "<<j<<endl; int t; cin>>t; return t; } #else #include"rail.h" #endif #define get getDistance void findLocation(int n,int first,int location[],int stype[]){ for(int i=1;i<n;++i)disf0[i]=get(0,i); int o=min_element(disf0+1,disf0+n)-disf0; stype[0]=1; stype[o]=2; location[o]=disf0[o]; for(int i=1;i<n;++i)if(i!=o)disfo[i]=get(o,i); vector<int> L,R; for(int i=1;i<n;++i)if(i!=o){ if(disfo[i]<disf0[o])location[i]=location[o]-disfo[i],stype[i]=1; else if(disf0[i]<disfo[i])R.push_back(i); else L.push_back(i); } { sort(L.begin(),L.end(),[&](const int &a,const int &b){ return disfo[a]<disfo[b]; }); int la=0; for(int i:L){ int d=get(i,la); if(d==disfo[i]-disfo[la])location[i]=location[la]+d,stype[i]=2; else location[i]=location[o]-disfo[i],stype[i]=1,la=i; } } { sort(R.begin(),R.end(),[&](const int &a,const int &b){ return disf0[a]<disf0[b]; }); int la=o; for(int i:R){ int d=get(i,la); if(d==disf0[i]-disf0[la])location[i]=location[la]-d,stype[i]=1; else location[i]=location[0]+disf0[i],stype[i]=2,la=i; } } for(int i=0;i<n;++i)location[i]+=first; } #ifdef WEAK int lo[4152454],st[2555554]; int main(){ int n=4; findLocation(n,2,lo,st); cout<<"location: "; for(int i=0;i<n;++i)cout<<lo[i]<<" "; cout<<endl; cout<<"stype: "; for(int i=0;i<n;++i)cout<<st[i]<<" "; cout<<endl; } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...