Submission #287424

#TimeUsernameProblemLanguageResultExecution timeMemory
287424egekabasRail (IOI14_rail)C++14
0 / 100
90 ms888 KiB
#include "rail.h" #include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define ff first #define ss second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<ull, ull> pull; typedef pair<int, int> pii; typedef pair<ld, ld> pld; int n; void findLocation(int N, int first, int location[], int stype[]){ n = N; location[0] = first; stype[0] = 1; pii lef = {first, 0}; vector<pii> vec; for(int i = 1; i < n; ++i){ vec.pb({getDistance(0, i), i}); } sort(all(vec)); location[vec[0].ss] = first + vec[0].ff; stype[vec[0].ss] = 2; set<int> up = {location[vec[0].ss]}; set<int, greater<int>> down = {first}; pii rig = {location[vec[0].ss], vec[0].ss}; for(int i = 1; i < vec.size(); ++i){ int dis0 = vec[i].ff; int idx = vec[i].ss; int disl = getDistance(lef.ss, idx); int disr = getDistance(rig.ss, idx); if(rig.ff-disr >= lef.ff){ auto it = up.upper_bound(rig.ff-disr); if(it == up.end() || disl != 2*(*it)-lef.ff-(rig.ff-disr)){ stype[idx] = 2; location[idx] = lef.ff+disl; rig = max(rig, {location[idx], idx}); up.insert(location[idx]); } else{ stype[idx] = 1; location[idx] = rig.ff-disr; lef = min(lef, {location[idx], idx}); down.insert(location[idx]); } } else if(lef.ff + disl <= rig.ff){ auto it = down.upper_bound(lef.ff+disl); if(it != down.end() && disr == rig.ff+lef.ff+disl-2*(*it)){ stype[idx] = 2; location[idx] = lef.ff+disl; rig = max(rig, {location[idx], idx}); up.insert(location[idx]); } else{ stype[idx] = 1; location[idx] = rig.ff-disr; lef = min(lef, {location[idx], idx}); down.insert(location[idx]); } } else{ assert(0); } } }

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:32:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     for(int i = 1; i < vec.size(); ++i){
      |                    ~~^~~~~~~~~~~~
rail.cpp:33:13: warning: unused variable 'dis0' [-Wunused-variable]
   33 |         int dis0 = vec[i].ff;
      |             ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...