一个很短的代码求调教
查看原帖
一个很短的代码求调教
490978
小超手123楼主2024/3/4 08:03

样例全过,一交全错

#include<bits/stdc++.h>
#define int long long
#define N 100005
using namespace std;
int n;
double ans = 1e15;
double sum[N];
struct node {
	double x, y, res;
}a[N];
bool cmp1(node A, node B) { return A.x < B.x; }
bool cmp2(node A, node B) { return A.y < B.y; }
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++) {
		int X, Y;
		cin >> X >> Y;
		a[i].x = (double)(X + Y) / 2.0;
		a[i].y = (double)(X - Y) / 2.0;
		//cout << a[i].x << " " << a[i].y << endl;
	}
	//cout << ans << endl;
	sort(a + 1, a + n + 1, cmp1);
	for(int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i].x;
	for(int i = 1; i <= n; i++) a[i].res = 1.00 * (i - 1) * a[i].x - sum[i - 1] + sum[n] - sum[i] - 1.00 * a[i].x * (n - i);
	sort(a + 1, a + n + 1, cmp2);
	for(int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i].y;
	for(int i = 1; i <= n; i++) {
		a[i].res += 1.00 * (i - 1) * a[i].y - sum[i - 1] + sum[n] - sum[i] - 1.00 * a[i].y * (n - i);
		ans = min(ans, a[i].res);
	}
	cout << ans;
	return 0;
}
 
2024/3/4 08:03
加载中...