Submission #59036

#TimeUsernameProblemLanguageResultExecution timeMemory
59036CrownShortcut (IOI16_shortcut)C++14
71 / 100
2027 ms199300 KiB
#include "shortcut.h" #include <bits/stdc++.h> using namespace std; #define X first #define Y second #define pb push_back typedef long long ll; typedef pair<int, int> ii; //transform (x, y) into (x+y, -x+y) with sizeof square = 2*d int n; vector<int> l, d; int c; vector< ll > X; struct square { ll x, y, d; //bottom left coordinates and size square(ll _x, ll _y, ll _d) { x = _x; y = _y; d = _d; } }; vector<square> all; bool works() { bool bad = false; for(auto sq : all) { if(sq.d< 0) bad = true; } if(bad) return false; if(all.empty()) return true; ll xmin = -1e18, ymin = -1e18, xmax = 1e18, ymax = 1e18; for(auto sq : all) { ll sqx = sq.x, sqy = sq.y, sqd = sq.d; xmin = max(xmin, sqx); xmax = min(xmax, sqx+sqd); ymin = max(ymin, sqy); ymax = min(ymax, sqy+sqd); } //printf("survival"); for(int a = 0; a< n; a++) { for(int b = a+1; b< n; b++) { ll _x = X[a], _y = X[b]; ll bx = _x+_y, by = -_x+_y; if(xmin<= bx && bx<= xmax && ymin<= by && by<= ymax) return true; } } return false; } ll find_shortcut(int _n, vector<int> _l, vector<int> _d, int _c) { n = _n; l = _l; d = _d; c = _c; X.resize(n); X[0] = 0; for(int i = 1; i< n; i++) { X[i] = X[i-1] + l[i-1]; } ll lo = 0, hi = 1e15; while(lo< hi) { ll mid = (lo+hi)/2; all.clear(); //printf("test %lld ", mid); for(int a = 0; a< n; a++) { for(int b = a+1; b< n; b++) { if(X[b]-X[a]+d[a]+d[b]<= mid) continue; ll _x = X[a], _y = X[b]; ll bx = _x, by = _y-(mid-d[a]-d[b]-c); all.pb(square(bx+by, -bx+by, 2LL*(mid-d[a]-d[b]-c))); } } if(works()) { //printf("works"); hi = mid; } else lo = mid+1; //printf("\n"); } return lo; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...