제출 #794462

#제출 시각아이디문제언어결과실행 시간메모리
794462aymanrs철로 (IOI14_rail)C++14
30 / 100
45 ms516 KiB
#include<bits/stdc++.h> #include <rail.h> using namespace std; int getDistance(int i, int j);//{ // cout << i << ' ' << j << '\n'; // int r; // cin >> r; // return r; // } void findLocation(int n, int first, int location[], int stype[]){ location[0] = first; stype[0] = 1; if(n == 1) return; int d0[n], o[n], d1[n], o1[n], ind = 1; d0[0] = 0; for(int i = 1;i < n;i++) { d0[i] = getDistance(0, i); o[i-1] = i; } sort(o, o+n-1, [&d0](int a, int b){ return d0[a] < d0[b]; }); int s = o[0]; stype[s] = 2; location[s] = first+d0[s]; d1[0] = d0[s]; o1[0] = 0; d1[s] = 0; for(int i = 1;i < n;i++){ if(i == s) continue; o1[ind++] = i; d1[i] = getDistance(s, i); } sort(o1, o1+ind, [&d1](int a, int b){return d1[a] < d1[b];}); int l = o1[0], l2 = s; int locl = location[s]-d1[l]; for(int z = 1;z < n-1;z++){ int i = o[z]; if(d0[i] == d0[s]+d1[i]) continue; int g = getDistance(l2, i); if(g == location[l2]-locl+first+d0[i]-locl){ l2 = i; location[i] = first+d0[i]; stype[i] = 2; } else { stype[i] = 1; location[i] = location[l2]-g; if(location[i] > locl){ locl = location[i]; l = i; } } } l = s;l2 = -1; first = location[s]; locl = location[s]; for(int z = 0;z < ind;z++){ int i = o1[z]; if(!i){ l2 = i; continue; } if(d0[i] < d0[s]+d1[i]) continue; if(l2 == -1){ stype[i] = 1; location[i] = first-d1[i]; l2 = i; continue; } int g = getDistance(l2, i); if(g == location[l]-location[l2]+location[l]-first+d1[i]){ l2 = i; location[i] = first-d1[i]; stype[i] = 1; } else { stype[i] = 2; location[i] = location[l2]+g; if(location[i] < locl){ locl = location[i]; l = i; } } } } // int main(){ // int loc[8], typ[8]; // findLocation(8, 4, loc, typ); // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...