听灌多,求助
  • 板块灌水区
  • 楼主Quartz_Blocks
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/5 13:28
  • 上次更新2024/7/5 15:45:33
查看原帖
听灌多,求助
1059176
Quartz_Blocks楼主2024/7/5 13:28

油滴扩展 40pts wa

#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <bits/stdc++.h>
using namespace std;
int n,ans[10];
bool used[10];
struct node{
	int x,y;
}a[10];
const double pi = 3.141592653;
int xa,xb,ya,yb;
double mn = 10000000000000;
double len(int x1,int y1,int x2,int y2){
	double a = abs(x1-x2);
	double b = abs(y1-y2);
	return sqrt(pow(a,2)+pow(b,2));
}
int to_edge(int x,int y){
	return min(min(min(abs(xa-x),abs(xb-x)),abs(ya-y)),abs(yb-y));
}
int S;
void dfs(int t){
	if(t == n+1){
		double sz = 0;
		for(int i = 1;i <= n;i++){
			double r[10];
			double mncnt = 1000000000000;
			memset(r,0,sizeof(r));
			for(int j = 1;j < i;j++){//求 i 与 j 2 个点的距离最小值 
				if(j == i) continue;
				double k = len(a[ans[i]].x,a[ans[i]].y,a[ans[j]].x,a[ans[j]].y); 
				mncnt = min(k,mncnt);
			}
			mncnt = min(mncnt,double(to_edge(a[ans[i]].x,a[ans[i]].y)));// 特判是否会碰到边界 
			sz += pow(mncnt,2)*pi;
		}
		mn = min(S-sz,mn);
		return;
	}
	for(int i = 1;i <= n;i++){
		if(used[i] == 0){
			ans[t] = i;
			used[i] = 1;
			dfs(t+1);
			used[i] = 0;
		}
		
	}
	return;
}
int main(){
	ios::sync_with_stdio(0);
	cin >>n;
	cin >> xa >> ya >> xb >> yb;
	for(int i = 1;i <= n;i++){
		cin >> a[i].x >> a[i].y;
	}
	S = abs(xa-xb)*abs(ya-yb);
	dfs(1);
	cout << fixed << setprecision(0) << round(mn);
	return 0;
}
2024/7/5 13:28
加载中...