제출 #348824

#제출 시각아이디문제언어결과실행 시간메모리
348824dennisstar철로 (IOI14_rail)C++17
30 / 100
97 ms620 KiB
#include <bits/stdc++.h> #include "rail.h" #define eb emplace_back using namespace std; const int MX = 5e3 + 5; const int INF = 1e9; int L[MX], *T, D[2][MX]; int X; int gd(int s, int e) { if (s==e) return 0; return getDistance(s, e); } void sol1(vector<int> l) { sort(l.begin(), l.end(), [&](int x, int y) { return D[1][x]<D[1][y]; }); int lst=0; vector<int> v={X, 0}; for (auto &i:l) { int d=gd(i, lst), fl=0; for (int j=1; j<v.size(); j++) if (L[v[j-1]]>L[lst]-d&&L[lst]-d>L[v[j]]&&D[1][i]==D[1][v[j]]+d+(L[lst]-L[v[j]])) { fl=1; break; } if (fl) { L[i]=L[lst]+d; T[i]=2; } else { L[i]=L[X]-D[1][i]; T[i]=1; lst=i; v.eb(i); } } } void sol2(vector<int> r) { sort(r.begin(), r.end(), [&](int x, int y) { return D[0][x]<D[0][y]; }); int lst=X; vector<int> v={0, X}; for (auto &i:r) { int d=gd(i, lst), fl=0; for (int j=1; j<v.size(); j++) if (L[v[j-1]]<L[lst]-d&&L[lst]-d<L[v[j]]&&D[0][i]==D[0][v[j]]+d-(L[lst]-L[v[j]])) { fl=1; break; } if (fl) { L[i]=L[lst]-d; T[i]=1; } else { L[i]=D[0][i]; T[i]=2; lst=i; v.eb(i); } } } void findLocation(int N, int first, int location[], int stype[]) { T=stype; T[0]=1; int mn=INF; for (int i=1; i<N; i++) { D[0][i]=gd(0, i); if (mn>D[0][i]) mn=D[0][i], X=i; } T[X]=2; L[X]=mn; for (int i=1; i<N; i++) if (i!=X) { D[1][i]=gd(X, i); if (mn>D[1][i]) mn=D[1][i]; } vector<int> l, m, r; for (int i=1; i<N; i++) if (i!=X) { if (D[0][i]==D[1][i]+L[X]) { if (D[1][i]<L[X]) m.eb(i); else l.eb(i); } else if (D[0][i]-L[X]==D[1][i]-2*mn) r.eb(i); } for (auto &i:m) L[i]=L[X]-D[1][i], T[i]=1; sol1(l); sol2(r); for (int i=0; i<N; i++) location[i]=L[i]+first; }

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

rail.cpp: In function 'void sol1(std::vector<int>)':
rail.cpp:24:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |   for (int j=1; j<v.size(); j++)
      |                 ~^~~~~~~~~
rail.cpp: In function 'void sol2(std::vector<int>)':
rail.cpp:47:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |   for (int j=1; j<v.size(); j++)
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...