제출 #556042

#제출 시각아이디문제언어결과실행 시간메모리
556042MilosMilutinovic철로 (IOI14_rail)C++14
100 / 100
101 ms32128 KiB
#include "rail.h" #include <bits/stdc++.h> using namespace std; const int MAX = 5005; int dist[MAX][MAX]; int ask(int i, int j) { if (i == j) { return 0; } if (i > j) { swap(i, j); } if (!dist[i][j]) { dist[i][j] = getDistance(i, j); } return dist[i][j]; } void findLocation(int n, int first, int location[], int stype[]) { map<int, int> mp; location[0] = first; stype[0] = 1; mp[location[0]] = 1; if (n == 1) { return; } vector<int> d0(n); for (int i = 1; i < n; i++) { d0[i] = ask(0, i); } int idx = 1; for (int i = 2; i < n; i++) { if (d0[i] < d0[idx]) { idx = i; } } location[idx] = first + d0[idx]; stype[idx] = 2; mp[location[idx]] = 2; vector<int> dx(n); for (int i = 0; i < n; i++) { dx[i] = ask(idx, i); } vector<int> l; vector<int> r; for (int i = 1; i < n; i++) { if (i == idx) { continue; } if (d0[i] == ask(0, idx) + dx[i]) { if (d0[idx] > dx[i]) { location[i] = location[idx] - dx[i]; stype[i] = 1; mp[location[i]] = 1; } else { l.push_back(i); } } else { r.push_back(i); } } sort(l.begin(), l.end(), [&](int i, int j) { return dx[i] < dx[j]; }); sort(r.begin(), r.end(), [&](int i, int j) { return d0[i] < d0[j]; }); int R = idx; for (int id = 0; id < r.size(); id++) { int i = r[id]; int d = (d0[R] + ask(R, i) - ask(0, i)) / 2; if (mp[location[R] - d] == 2) { location[i] = location[R] - ask(R, i); stype[i] = 1; mp[location[i]] = 1; } else { location[i] = location[0] + ask(0, i); stype[i] = 2; mp[location[i]] = 2; R = i; } } int L = 0; for (int id = 0; id < l.size(); id++) { int i = l[id]; int d = (dx[L] + ask(L, i) - ask(idx, i)) / 2; if (mp[location[L] + d] == 1) { location[i] = location[L] + ask(L, i); stype[i] = 2; mp[location[i]] = 2; } else { location[i] = location[idx] - ask(idx, i); stype[i] = 1; mp[location[i]] = 1; L = i; } } }

컴파일 시 표준 에러 (stderr) 메시지

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:73:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |   for (int id = 0; id < r.size(); id++) {
      |                    ~~~^~~~~~~~~~
rail.cpp:88:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |   for (int id = 0; id < l.size(); id++) {
      |                    ~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...