Submission #927329

#TimeUsernameProblemLanguageResultExecution timeMemory
927329DAleksaBulldozer (JOI17_bulldozer)C++17
20 / 100
17 ms1052 KiB
#include <bits/stdc++.h> using namespace std; struct point { int x; int y; int w; }; struct frac { int p; int q; frac() { } frac(int _p, int _q) { p = _p; q = _q; } }; bool operator < (frac a, frac b) { return a.p * 1LL * b.q < b.p * 1LL * a.q; } const int N = 105; int n; point a[N]; map<frac, vector<pair<int, int>>> buc; vector<frac> slopes; int order[N], pos[N]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for(int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y >> a[i].w; for(int i = 1; i <= n; i++) { for(int j = i + 1; j <= n; j++) { int sign = 1; int dx = a[i].x - a[j].x, dy = a[i].y - a[j].y; if(dx < 0) sign *= -1; if(dy < 0) sign *= -1; dx = abs(dx); dy = abs(dy); int g = __gcd(dx, dy); dx /= g; dy /= g; if(dx != 0) dy *= sign; if(a[i].x == a[j].x) { if(a[i].y > a[j].y) buc[frac(dy, dx)].emplace_back(i, j); else buc[frac(dy, dx)].emplace_back(j, i); } else { if(a[i].x < a[j].x) buc[frac(dy, dx)].emplace_back(i, j); else buc[frac(dy, dx)].emplace_back(j, i); } slopes.push_back(frac(dy, dx)); } } sort(slopes.begin(), slopes.end(), [&](frac a, frac b) { return a.p * 1LL * b.q < b.p * 1LL * a.q; }); for(int i = 1; i <= n; i++) order[i] = i; sort(order + 1, order + n + 1, [&](int i, int j) { if(a[i].x == a[j].x) return a[i].y > a[j].y; return a[i].x < a[j].x; }); for(int i = 1; i <= n; i++) pos[order[i]] = i; long long ans = 0; for(frac slope : slopes) { long long mx = 0; for(int i = 1; i <= n; i++) { mx = max((long long)a[order[i]].w, a[order[i]].w + mx); ans = max(ans, mx); } for(pair<int, int> p : buc[slope]) { int i = p.first, j = p.second; if(pos[i] < pos[j]) { swap(order[pos[i]], order[pos[j]]); swap(pos[i], pos[j]); } } } { long long mx = 0; for(int i = 1; i <= n; i++) { mx = max((long long)a[order[i]].w, a[order[i]].w + mx); ans = max(ans, mx); } } cout << ans; return 0; }
#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...