Submission #114330

#TimeUsernameProblemLanguageResultExecution timeMemory
114330BruteforcemanPalembang Bridges (APIO15_bridge)C++11
49 / 100
2062 ms2788 KiB
#include "bits/stdc++.h"
using namespace std;
typedef pair <int, int> pii;

vector <pii> v;
long long pre[1000010], suf[1000010];

bool cmp(pii a, pii b) {
	return a.first + a.second < b.first + b.second;
}

long long solver(vector <pii> u) {
	vector <int> a;
	for(auto i : u) {
		a.push_back(i.first);
		a.push_back(i.second);
	}
	sort(a.begin(), a.end());
	long long ans = 0;
	for(int i : a) {
		ans += abs(a[a.size() / 2] - i);
	}
	return ans;
}

int main(int argc, char const *argv[])
{
	int k, n;
	scanf("%d %d", &k, &n);
	
	long long add = 0;
	for(int i = 1; i <= n; i++) {
		char p, q;
		int s, t;
		scanf(" %c %d %c %d", &p, &s, &q, &t);
		if(p == q) {
			add += abs(s - t);
		} else {
			add += 1;
			if(s > t) swap(s, t);
			v.push_back(pii(s, t));
		}
	}
	if(v.size() == 0) {
		printf("%lld\n", add);
		exit(0);
	}
	sort(v.begin(), v.end(), cmp);
	vector <pii> u;
	for(int i = 0; i < v.size(); i++) {
		u.push_back(v[i]);
		pre[i] = solver(u);
	}
	u.clear();
	for(int i = v.size() - 1; i >= 0; i--) {
		u.push_back(v[i]);
		suf[i] = solver(u);
	}
	long long ans = LLONG_MAX;
	if(k == 2) {
		for(int i = 0; i < v.size(); i++) {
			ans = min(ans, pre[i] + suf[i + 1]);
		}
	} else {
		ans = pre[v.size() - 1];
	}
	printf("%lld\n", ans + add);
	return 0;
}

Compilation message (stderr)

bridge.cpp: In function 'int main(int, const char**)':
bridge.cpp:50:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < v.size(); i++) {
                 ~~^~~~~~~~~~
bridge.cpp:61:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < v.size(); i++) {
                  ~~^~~~~~~~~~
bridge.cpp:29:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &k, &n);
  ~~~~~^~~~~~~~~~~~~~~~~
bridge.cpp:35:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c %d %c %d", &p, &s, &q, &t);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...