Submission #1144707

#TimeUsernameProblemLanguageResultExecution timeMemory
1144707SmuggingSpunPalembang Bridges (APIO15_bridge)C++20
31 / 100
27 ms1476 KiB
#include<bits/stdc++.h>
#define taskname "C"
using namespace std;
typedef long long ll;
const ll INF = 1e18;
template<class T>void minimize(T& a, T b){
	if(a > b){
		a = b;
	}
}
int k, n;
namespace sub12{
	void solve(){
		ll ans = 0;
		vector<int>p;
		for(int i = 0; i < n; i++){
			char a, b;
			int xa, xb;
			cin >> a >> xa >> b >> xb;
			if(a == b){
				ans += abs(xa - xb);
			}
			else{
				p.emplace_back(xa);
				p.emplace_back(xb);
				ans++;
			}
		}
		if(!p.empty()){
			sort(p.begin(), p.end());
			int median = p[int(p.size()) >> 1];
			for(int& x : p){
				ans += abs(median - x);
			}
		}
		cout << ans;
	}
}
namespace sub3{
	void solve(){
		vector<int>candidate;
		vector<pair<int, int>>d;
		ll ans = 0;
		for(int i = 0; i < n; i++){
			char a, b;
			int xa, xb;
			cin >> a >> xa >> b >> xb;
			if(a == b){
				ans += abs(xa - xb);
			}
			else{
				candidate.emplace_back(xa);
				candidate.emplace_back(xb);
				ans++;
				d.emplace_back(xa, xb);
			}
		}
		if(!d.empty()){
			ll add = INF;
			sort(candidate.begin(), candidate.end());
			candidate.resize(unique(candidate.begin(), candidate.end()) - candidate.begin());
			for(int i = 0; i < candidate.size(); i++){
				for(int j = i + 1; j < candidate.size(); j++){
					int I = candidate[i], J = candidate[j];
					ll sum = 0;
					for(auto& [x, y] : d){
						sum += min(abs(x - I) + abs(y - I), abs(x - J) + abs(y - J));				
					}
					minimize(add, sum);
				}
			}
			ans += add;
		}
		cout << ans;
	}
}
namespace sub45{
	void solve(){
		
	}
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	if(fopen(taskname".inp", "r")){
		freopen(taskname".inp", "r", stdin);
	}
	cin >> k >> n;
	if(k == 1){
		sub12::solve();
	}
	else if(k == 2 && n <= 100){
		sub3::solve();
	}
	else{
		sub45::solve();
	}
}

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:85:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   85 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...