Submission #1043714

#TimeUsernameProblemLanguageResultExecution timeMemory
1043714pravcoderRail (IOI14_rail)C++14
8 / 100
33 ms648 KiB
#include "rail.h" #include <vector> #include <cmath> #include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef vector<int> vi; #define rep(i, n) for (int i = 0; i<n; i++) #define pb push_back void findLocation(int N, int first, int location[], int stype[]) { vi cs; vi ds; vi zdists; rep(i, N) { zdists.pb(getDistance(0, i)); } rep(i, (N-1)/2) { int newdist = getDistance(2*i + 1, 2*i + 2); int dist1 = zdists[2*i + 1]; int dist2 = zdists[2*i + 2]; if (newdist == dist1 + dist2) { ds.pb(2*i + 1); ds.pb(2*i + 2); } else if (newdist == dist1 - dist2) { cs.pb(2*i + 1); ds.pb(2*i + 2); } else if (newdist == dist2 - dist1) { ds.pb(2*i + 1); cs.pb(2*i + 2); } else { cs.pb(2*i + 1); cs.pb(2*i + 2); } } if (N % 2 == 0) { int i = N - 2; int newdist = getDistance(i + 1, i); int dist1 = zdists[i + 1]; int dist2 = zdists[i]; if (newdist == dist1 + dist2) { ds.pb(i + 1); } else if (newdist == dist1 - dist2) { cs.pb(i + 1); } else if (newdist == dist2 - dist1) { ds.pb(i + 1); } else { cs.pb(i + 1); } } for (auto d : ds) { location[d] = first + zdists[d]; stype[d] = 2; } int fd = ds[0]; for (auto c : cs) { location[c] = location[fd] - getDistance(fd, c); stype[c] = 1; } stype[0] = 1; location[0] = first; return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...