Submission #107127

#TimeUsernameProblemLanguageResultExecution timeMemory
107127oolimryPalembang Bridges (APIO15_bridge)C++14
22 / 100
364 ms10484 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<long long, long long> ii; int main() { //freopen("i.txt","r",stdin); int k, n; ios_base::sync_with_stdio(false); cin.tie(0); cin >> k >> n; vector<ii> points; long long forcedDist = 0ll; for(int i = 0;i < n;i++){ char a, c; long long b, d; cin >> a >> b >> c >> d; if(a == c){ forcedDist += abs(d-b); } else{ forcedDist += abs(d-b); forcedDist++; if(b > d) swap(b,d); points.push_back(ii(b,i)); points.push_back(ii(d,i)); } } n = points.size(); sort(points.begin(),points.end()); for(int i = 0;i < n;i++){ //cout << points[i].first << " " << points[i].second << "\n"; } long long passed = 0ll; long long after = n/2; set<long long> in; long long preVal = 0ll; long long val = 0ll; for(int i = 0;i < n;i++){ if(in.find(points[i].second) != in.end()) continue; in.insert(points[i].second); val += points[i].first; } in.clear(); ///val for putting bridge at 0; long long minVal = val; ///need to times 2 later for(int i = 0;i < n;i++){ long long diff = points[i].first - preVal; if(in.find(points[i].second) == in.end()){ val += passed * diff; val -= after * diff; in.insert(points[i].second); after--; } else{ val += passed * diff; val -= after * diff; in.erase(points[i].second); passed++; } //cout << val << " " << passed << " " << after << " " << diff << "\n"; ///std stuff minVal = min(val,minVal); preVal = points[i].first; } cout << minVal * 2ll + forcedDist; 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...