Submission #60531

#TimeUsernameProblemLanguageResultExecution timeMemory
60531istleminPalembang Bridges (APIO15_bridge)C++14
22 / 100
83 ms22336 KiB
#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b) for(ll i = a; i < ll(b); ++i)
#define trav(a, v) for(auto& a : v)
#define all(x) x.begin(), x.end()
#define sz(x) (ll)(x).size()
#define D(x) cerr << #x << " = " << x << endl

typedef long long ll;
typedef pair<ll, ll> pii;
typedef vector<ll> vi;


int main() {
    cin.sync_with_stdio(false);
	ll k,n;
	ll totDist = 0;
	vector<pii> intervals;
	vector<ll> points;
	cin>>k>>n;
	rep(i,0,n){
		char a,b;
		ll c,d;
		cin>>a>>c>>b>>d;
		if(a!=b){
			intervals.push_back(pii(c,d));
			points.push_back(c);
			points.push_back(d);
		}else{
			totDist += abs(c-d);
		}
	}
	ll bestDist = 1e18;
	if(k==1){
		sort(all(points));
		ll ahead = points.size()-1;
		ll behind = 1;
		ll dist = 0;
		rep(i,1,points.size()) dist += points[i]-points[0];
		bestDist = dist;
		rep(i,1,points.size()) {
			ll jump = points[i]-points[i-1];
			dist += jump*behind;
			dist -= jump*ahead;
			bestDist = min(dist,bestDist);
			++behind;
			--ahead;
		}
	}else{
		rep(a,0,points.size()){
			rep(b,a+1,points.size()){
				ll dist = 0;
				rep(i,0,intervals.size()){
					dist += min(abs(intervals[i].first-points[a])+abs(intervals[i].second-points[a]),
								abs(intervals[i].first-points[b])+abs(intervals[i].second-points[b]));
				}
				bestDist = min(dist,bestDist);
			}
		}
	}
	totDist += bestDist;
	totDist += intervals.size();
	cout<<totDist<<endl;
}
#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...