油滴扩展 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;
}