제출 #835264

#제출 시각아이디문제언어결과실행 시간메모리
835264Liudas철로 (IOI14_rail)C++17
30 / 100
160 ms512 KiB
#include "rail.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <assert.h> #include "rail.h" #include <set> #include <vector> #include <numeric> #include <algorithm> #include <iostream> #include <map> using namespace std; void findLocation(int N, int first, int location[], int stype[]) { int lid = 0, rid = -1; vector<int> dist(N, 0); for(int i = 0; i < N; i ++){ if(i == lid)continue; int temp = getDistance(lid, i); dist[i] = temp; } vector<int> order(N); iota(order.begin(), order.end(), 0); sort(order.begin(), order.end(), [&](int a, int b){return dist[a] < dist[b];}); int d = dist[order[1]]; rid = order[1]; lid = order[0]; stype[order[0]] = 1; stype[order[1]] = 2; location[order[0]] = first; location[order[1]] = first + d; int idx = -1; for(int i : order){ idx ++; if(stype[i])continue; int md = 1e9, mid = 0; vector<int> distances(N); for(int j = 0; j < idx; j ++){ int t = getDistance(order[j], i); distances[order[j]] = t; if(t < md){ md = t; mid = order[j]; } } if(stype[mid] == 2){ stype[i] = 1; location[i] = location[rid] - distances[rid]; if(location[lid] > location[i]){ lid = i; } } else{ stype[i] = 2; location[i] = location[lid] + distances[lid]; if(location[rid] < location[i]){ rid = i; } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...