Submission #41392

#TimeUsernameProblemLanguageResultExecution timeMemory
41392RockyBPalembang Bridges (APIO15_bridge)C++14
17 / 100
1905 ms1608 KiB
/// In The Name Of God

#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>

#define f first
#define s second

#define pb push_back
#define pp pop_back
#define mp make_pair

#define sz(x) (int)x.size()
#define sqr(x) ((x) * 1ll * (x))
#define all(x) x.begin(), x.end()

#define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

#define nl '\n'
#define ioi exit(0);

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;

const int N = (int)1e5 + 7;
const int inf = (int)1e9 + 7;
const int mod = (int)1e9 + 7;
const ll linf = (ll)1e18 + 7;

const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1};
const int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};

using namespace std;

int k, n;
ll add, ans = linf;

int p1[N], p2[N];
char t1[N], t2[N];


namespace k1 {
	void calc(int p) {
		ll cur = 0;
		for (int i = 1; i <= n; i++) {
			if (t1[i] == t2[i]) cur += abs(p1[i] - p2[i]);
			else cur += abs(p - p1[i]) + abs(p - p2[i]);
		}
		ans = min(ans, cur);
	}
	void solve() {
		for (int i = 1; i <= n; i++) {
			calc(p1[i]);
			calc(p2[i]);
			if (clock() / (double)CLOCKS_PER_SEC > 1.9) break;
		}
		cout << ans + add;
		ioi
	}
}
namespace k2 {
	void calc(int p, int P1) {
		ll cur = 0;
		for (int i = 1; i <= n; i++) {
			if (t1[i] == t2[i]) cur += abs(p1[i] - p2[i]);
			else cur += min(abs(p - p1[i]) + abs(p - p2[i]), abs(P1 - p1[i]) + abs(P1 - p2[i]));
		}
		ans = min(ans, cur);
	}
	void solve() {
		vector <int> a;
		for (int i = 1; i <= n; i++) {
			a.pb(p1[i]);
			a.pb(p2[i]);
		}
		sort(all(a));
		a.erase(unique(all(a)), a.end());
		for (int i = 0; i < sz(a); i++) {
			for (int j = i + 1; j < sz(a); j++) {
				calc(a[i], a[j]);
			}
			if (clock() / (double)CLOCKS_PER_SEC > 1.9) break;
		}
		cout << ans + add;
		ioi
	}
}

int main() {
	#ifdef IOI2018
		freopen ("in.txt", "r", stdin);
	#endif
	Kazakhstan
	cin >> k >> n;
	for (int i = 1; i <= n; i++) {
		cin >> t1[i] >> p1[i] >> t2[i] >> p2[i];
		if (t1[i] != t2[i]) add++;
	}
	if (k == 1) k1 :: solve();
	if (k == 2) k2 :: solve();
	ioi
}
#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...