#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 65;
int q , l1 , r1 , l2 , r2;
int b[N];
double eps = 1e-9;
bool big(double a, double b){return a - b > eps;}
double dis(int x1 , int y1 ,int x2 ,int y2){return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));}
double chmin(double a , double b){return big(a , b) ? b : a;}
double chmax(double a , double b){return big(a , b) ? a : b;}
struct Point{
int x , y;
Point(){}
Point(int x,int y):x(x),y(y){}
void read(){cin >> x >> y;}
bool operator < (const Point & A) const{
if (x != A.x) return x < A.x;
else return y < A.y;
}
}a[N];
double r[N];
double spread(int t){
double ans = 1000000.00;
for (int i = 1 ; i < t ; i ++){
if (big(r[i], dis(a[b[t]].x , a[b[t]].y , a[b[i]].x , a[b[i]].y))) return 0.00;
ans = chmin(ans , dis(a[b[t]].x , a[b[t]].y , a[b[i]].x , a[b[i]].y) - r[i]);
}
ans = chmin(ans , 1.0 * (a[b[t]].x - min(l1,l2)));
ans = chmin(ans , 1.0 * (max(l1,l2) - a[b[t]].x));
ans = chmin(ans , 1.0 * (a[b[t]].y - min(r1,r2)));
ans = chmin(ans , 1.0 * (max(r1,r2) - a[b[t]].y));
return ans;
}
signed main(){
cin >> q;
cin >> l1 >> r1 >> l2 >> r2;
for (int i = 1 ; i <= q ; i ++) a[i].read(),b[i] = i;
double res = 1000000.00;
do{
for (int i = 1 ; i <= q ; i ++) r[i] = spread(i);
double ans = 0.00;
for (int i = 1 ; i <= q ;i ++) ans += 3.1415926 * r[i] * r[i];
res = chmin(res , round(ans));
}while (next_permutation(b + 1 , b + q + 1));
cout << (int) (max(l1 , l2) - min(l1 , l2)) * (max(r1 , r2) - min(r1, r2)) - res << endl;
return 0;
}
30 pts
Wa on #2
3
-98 5 30 30
-42 11
-51 17
-11 22
2.ans
2547