Submission #1164098

#TimeUsernameProblemLanguageResultExecution timeMemory
1164098catsarecool5530Palembang Bridges (APIO15_bridge)C++20
22 / 100
32 ms4540 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define endl "\n"; #define all(x) x.begin(), x.end() const ll MOD = 1e9+7; #define int long long struct House { ll location; bool isStart; bool operator<(const House& other) const { return location < other.location; } }; void solve() { int k, n; cin >> k >> n; if (k == 2) { cout << -1 << endl; return; } vector<House> houses; ll sum = 0; ll initLoss = 0; int nonTriv = 0; for (int i = 0; i < n; i++) { char a; int s; char b; int e; cin >> a >> s >> b >> e; if (a == b) { sum += abs(e-s); } else { nonTriv++; if (s > e) { swap(s, e); } sum += abs(e-s); sum++; initLoss += s; houses.push_back({s, true}); houses.push_back({e, false}); } } sort(all(houses)); ll minLoss = initLoss; ll curLoss = initLoss; int left = 0; int right = nonTriv; for (int i = 0; i < houses.size(); i++) { if (i > 0) { curLoss -= right * (houses[i].location - houses[i-1].location); curLoss += left * (houses[i].location - houses[i-1].location); } else { curLoss -= right * houses[i].location; } if (houses[i].isStart) { right--; } else { left++; } minLoss = min(minLoss, curLoss); } cout << sum + minLoss*2 << endl; } signed main() { ios::sync_with_stdio(0); cin.tie(NULL); // freopen("example.in", "r", stdin); // freopen("hayfeast.out", "w", stdout); int t = 1; // cin >> t; while (t--) { solve(); } }
#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...