Submission #1077773

#TimeUsernameProblemLanguageResultExecution timeMemory
1077773danikoynovBulldozer (JOI17_bulldozer)C++14
0 / 100
17 ms496 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; struct Point { ll x, y; Point(ll _x = 0, ll _y = 0) { x = _x; y = _y; } void input() { cin >> x >> y; } }; const int MAXN = 2010; int n; pair < Point, ll > spot[MAXN]; void input() { cin >> n; for (int i = 1; i <= n; i ++) { spot[i].first.input(); cin >> spot[i].second; } } ll signed_area(Point A, Point B, Point C) /// returns signed area * 2 { ll area = (B.x - A.x) * (A.y + B.y) + (C.x - B.x) * (B.y + C.y) + (A.x - C.x) * (C.y + A.y); return area; } int orient(Point A, Point B, Point C) { ll area = signed_area(A, B, C); if (area > 0) return 1; if (area < 0) return -1; assert(area != 0); return 0; } void simulate() { ll result = 0; for (int i = 1; i <= n; i ++) for (int j = i + 1; j <= n; j ++) { vector < pair < ll, ll > > pos, neg; for (int k = 1; k <= n; k ++) { if (k == i || k == j) continue; ll area = signed_area(spot[i].first, spot[j].first, spot[k].first); /**if (i == 3 && j == 4) { cout << "pair with " << k << " area " << area << " value " << spot[k].second << endl; }*/ if (area > 0) pos.push_back({area, spot[k].second}); else neg.push_back({-area, spot[k].second}); } sort(pos.begin(), pos.end()); sort(neg.begin(), neg.end()); ll best = 0, sum = 0; for (pair < ll, ll > cur : pos) { sum += cur.second; best = max(best, sum); } sum = 0; for (pair < ll, ll > cur : neg) { sum += cur.second; best = max(best, sum); } //cout << "HERE " << best << endl; best = best + spot[i].second; best = best + spot[j].second; //cout << "new best " << best << endl; ll mx = min(spot[i].second, spot[j].second); //cout << "mx " << mx << endl; if (mx < 0) best -= mx; //cout << "pair " << i << " " << j << " " << best << endl; result = max(result, best); } cout << result << endl; } void solve() { input(); simulate(); } int main() { solve(); return 0; } /* 3 0 0 1 1 0 1 2 0 1 */
#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...