結果

問題 No.1251 絶対に間違ってはいけない最小化問題
ユーザー 東前頭十一枚目
提出日時 2020-10-10 01:02:22
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 227 ms / 2,000 ms
コード長 645 bytes
コンパイル時間 2,085 ms
コンパイル使用メモリ 199,244 KB
最終ジャッジ日時 2025-01-15 06:06:03
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 42
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n; cin >> n;
	pair<int64_t, int64_t> p[n];
	for(auto& [a, _b] : p) {
		cin >> a;
	}
	for(auto& [_a, b] : p) {
		cin >> b;
	}
	sort(p, p + n);
	double l = -1e9, r = 1e9;
	int cnt = 200;
	while(cnt--) {
		double ll = (2 * l + r) / 3;
		double rr = (l + 2 * r) / 3;
		double lval = 0, rval = 0;
		for(auto& [a, b] : p) {
			lval += b * abs(ll - a);
			rval += b * abs(rr - a);
		}
		if(lval <= rval) {
			r = rr;
		} else {
			l = ll;
		}
	}
	int64_t x = round(l);
	int64_t ans = 0;
	for(auto& [a, b] : p) {
		ans += b * abs(x - a);
	}
	cout << x << " " << ans << '\n';
	return 0;
}
0