40分求助
查看原帖
40分求助
764666
LostKeyToReach楼主2023/12/24 11:08
#include <iostream>
#include <cmath>
#define sq(x) ((x) * (x))
#define pi 3.1415926535/*acos(-1)*/
#define int long long
using namespace std;
int n, XX[10], YY[10], A[10], vis[20];
double S, j = -1.0, r[10], x, y, _x, _y;
double distance(int x, int y, int X, int Y) {
	return sqrt(sq(x - X) + sq(y - Y));
}
double calr(int k) {
	double r1 = min(distance(XX[k], YY[k], x, YY[k]), distance(XX[k], YY[k], _x, YY[k]));
	double r2 = min(distance(XX[k], YY[k], XX[k], _y), distance(XX[k], YY[k], XX[k], y));
	double rdis = min(r1, r2);
	for (int i = 1; i < k; i++) {
		if (vis[i]) {
			rdis = min(rdis, max(distance(XX[i], YY[i], XX[k], YY[k]) - r[i], 0.0));
		}
	}
	return rdis;
}
void dfs(int k, double mj) {
	if (k > n) {
		j = max(mj, j);
		return;
	}
	for (int i = 1; i <= n; i++) {
		if (!vis[i]) {
			vis[i] = 1;
			r[k] = calr(k);
			dfs(k + 1, mj + sq(r[k]) * pi);
			vis[i] = 0;
		}
	}
}
signed main() {
	cin >> n;
	cin >> x >> y >> _x >> _y;
	S = abs(x - _x) * abs(y - _y);
	for (int i = 1; i <= n; i++) {
		cin >> XX[i] >> YY[i];
	}
	dfs(1, 0);
	cout << (int)(S - j + 0.5);
}

你说的对,但是样例能过,却只能得40分。

2023/12/24 11:08
加载中...