题解 P1378 【油滴扩展】

· · 题解

暴力破解

code:

#include <bits/stdc++.h>
using namespace std;
int n, x1, x2, yu, y2, x[7], y[7], max;
double bj1, bj2, bj3, bj4, bj5, bj6, the_max_num;
double max_ab(double x, double y);
double min_ab(double x, double y);
void sc(int q, int q1, int q2, int q3, int q4, int q5, int q6)
{
    if (q == 1)
    {
        bj1 = min_ab(min_ab(fabs(x[q1] - x1), fabs(x[q1] - x2)), min_ab(fabs(y[q1] - yu), fabs(y[q1] - y2)));
        the_max_num = max_ab(the_max_num, bj1 * bj1 * 3.1415926);
    }
    if (q == 2)
    {
        bj1 = min_ab(min_ab(fabs(x[q1] - x1), fabs(x[q1] - x2)), min_ab(fabs(y[q1] - yu), fabs(y[q1] - y2)));
        if (sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) <= bj1)
            bj2 = 0;
        else
            bj2 = min_ab(min_ab(min_ab(fabs(x[q2] - x1), fabs(x[q2] - x2)), min_ab(fabs(y[q2] - yu), fabs(y[q2] - y2))), sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) - bj1);
        the_max_num = max_ab(the_max_num, bj1 * bj1 * 3.1415926 + bj2 * bj2 * 3.1415926);
    }
    if (q == 3)
    {
        bj1 = min_ab(min_ab(fabs(x[q1] - x1), fabs(x[q1] - x2)), min_ab(fabs(y[q1] - yu), fabs(y[q1] - y2)));
        if (sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) <= bj1)
            bj2 = 0;
        else
            bj2 = min_ab(min_ab(min_ab(fabs(x[q2] - x1), fabs(x[q2] - x2)), min_ab(fabs(y[q2] - yu), fabs(y[q2] - y2))), sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) - bj1);
        if (sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) <= bj1 || sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) <= bj2)
            bj3 = 0;
        else
            bj3 = min_ab(min_ab(min_ab(min_ab(fabs(x[q3] - x1), fabs(x[q3] - x2)), min_ab(fabs(y[q3] - yu), fabs(y[q3] - y2))), sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) - bj1), sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) - bj2);
        the_max_num = max_ab(the_max_num, bj1 * bj1 * 3.1415926 + bj2 * bj2 * 3.1415926 + bj3 * bj3 * 3.1415926);
    }
    if (q == 4)
    {
        bj1 = min_ab(min_ab(fabs(x[q1] - x1), fabs(x[q1] - x2)), min_ab(fabs(y[q1] - yu), fabs(y[q1] - y2)));
        if (sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) <= bj1)
            bj2 = 0;
        else
            bj2 = min_ab(min_ab(min_ab(fabs(x[q2] - x1), fabs(x[q2] - x2)), min_ab(fabs(y[q2] - yu), fabs(y[q2] - y2))), sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) - bj1);
        if (sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) <= bj1 || sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) <= bj2)
            bj3 = 0;
        else
            bj3 = min_ab(min_ab(min_ab(min_ab(fabs(x[q3] - x1), fabs(x[q3] - x2)), min_ab(fabs(y[q3] - yu), fabs(y[q3] - y2))), sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) - bj1), sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) - bj2);
        if (sqrt((x[q4] - x[q1]) * (x[q4] - x[q1]) + (y[q4] - y[q1]) * (y[q4] - y[q1])) <= bj1 || sqrt((x[q4] - x[q2]) * (x[q4] - x[q2]) + (y[q4] - y[q2]) * (y[q4] - y[q2])) <= bj2 || sqrt((x[q4] - x[q3]) * (x[q4] - x[q3]) + (y[q4] - y[q3]) * (y[q4] - y[q3])) <= bj3)
            bj4 = 0;
        else
            bj4 = min_ab(min_ab(min_ab(min_ab(min_ab(fabs(x[q4] - x1), fabs(x[q4] - x2)), min_ab(fabs(y[q4] - yu), fabs(y[q4] - y2))), sqrt((x[q4] - x[q1]) * (x[q4] - x[q1]) + (y[q4] - y[q1]) * (y[q4] - y[q1])) - bj1), sqrt((x[q4] - x[q2]) * (x[q4] - x[q2]) + (y[q4] - y[q2]) * (y[q4] - y[q2])) - bj2), sqrt((x[q4] - x[q3]) * (x[q4] - x[q3]) + (y[q4] - y[q3]) * (y[q4] - y[q3])) - bj3);
        the_max_num = max_ab(the_max_num, bj1 * bj1 * 3.1415926 + bj2 * bj2 * 3.1415926 + bj3 * bj3 * 3.1415926 + bj4 * bj4 * 3.1415926);
    }
    if (q == 5)
    {
        bj1 = min_ab(min_ab(fabs(x[q1] - x1), fabs(x[q1] - x2)), min_ab(fabs(y[q1] - yu), fabs(y[q1] - y2)));
        if (sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) <= bj1)
            bj2 = 0;
        else
            bj2 = min_ab(min_ab(min_ab(fabs(x[q2] - x1), fabs(x[q2] - x2)), min_ab(fabs(y[q2] - yu), fabs(y[q2] - y2))), sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) - bj1);
        if (sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) <= bj1 || sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) <= bj2)
            bj3 = 0;
        else
            bj3 = min_ab(min_ab(min_ab(min_ab(fabs(x[q3] - x1), fabs(x[q3] - x2)), min_ab(fabs(y[q3] - yu), fabs(y[q3] - y2))), sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) - bj1), sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) - bj2);
        if (sqrt((x[q4] - x[q1]) * (x[q4] - x[q1]) + (y[q4] - y[q1]) * (y[q4] - y[q1])) <= bj1 || sqrt((x[q4] - x[q2]) * (x[q4] - x[q2]) + (y[q4] - y[q2]) * (y[q4] - y[q2])) <= bj2 || sqrt((x[q4] - x[q3]) * (x[q4] - x[q3]) + (y[q4] - y[q3]) * (y[q4] - y[q3])) <= bj3)
            bj4 = 0;
        else
            bj4 = min_ab(min_ab(min_ab(min_ab(min_ab(fabs(x[q4] - x1), fabs(x[q4] - x2)), min_ab(fabs(y[q4] - yu), fabs(y[q4] - y2))), sqrt((x[q4] - x[q1]) * (x[q4] - x[q1]) + (y[q4] - y[q1]) * (y[q4] - y[q1])) - bj1), sqrt((x[q4] - x[q2]) * (x[q4] - x[q2]) + (y[q4] - y[q2]) * (y[q4] - y[q2])) - bj2), sqrt((x[q4] - x[q3]) * (x[q4] - x[q3]) + (y[q4] - y[q3]) * (y[q4] - y[q3])) - bj3);
        if (sqrt((x[q5] - x[q1]) * (x[q5] - x[q1]) + (y[q5] - y[q1]) * (y[q5] - y[q1])) <= bj1 || sqrt((x[q5] - x[q2]) * (x[q5] - x[q2]) + (y[q5] - y[q2]) * (y[q5] - y[q2])) <= bj2 || sqrt((x[q5] - x[q3]) * (x[q5] - x[q3]) + (y[q5] - y[q3]) * (y[q5] - y[q3])) <= bj3 || sqrt((x[q5] - x[q4]) * (x[q5] - x[q4]) + (y[q5] - y[q4]) * (y[q5] - y[q4])) <= bj4)
            bj5 = 0;
        else
            bj5 = min_ab(min_ab(min_ab(min_ab(min_ab(min_ab(fabs(x[q5] - x1), fabs(x[q5] - x2)), min_ab(fabs(y[q5] - yu), fabs(y[q5] - y2))), sqrt((x[q5] - x[q1]) * (x[q5] - x[q1]) + (y[q5] - y[q1]) * (y[q5] - y[q1])) - bj1), sqrt((x[q5] - x[q2]) * (x[q5] - x[q2]) + (y[q5] - y[q2]) * (y[q5] - y[q2])) - bj2), sqrt((x[q5] - x[q3]) * (x[q5] - x[q3]) + (y[q5] - y[q3]) * (y[q5] - y[q3])) - bj3), sqrt((x[q5] - x[q4]) * (x[q5] - x[q4]) + (y[q5] - y[q4]) * (y[q5] - y[q4])) - bj4);
        the_max_num = max_ab(the_max_num, bj1 * bj1 * 3.1415926 + bj2 * bj2 * 3.1415926 + bj3 * bj3 * 3.1415926 + bj4 * bj4 * 3.1415926 + bj5 * bj5 * 3.1415926);
    }
    if (q == 6)
    {
        bj1 = min_ab(min_ab(fabs(x[q1] - x1), fabs(x[q1] - x2)), min_ab(fabs(y[q1] - yu), fabs(y[q1] - y2)));
        if (sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) <= bj1)
            bj2 = 0;
        else
            bj2 = min_ab(min_ab(min_ab(fabs(x[q2] - x1), fabs(x[q2] - x2)), min_ab(fabs(y[q2] - yu), fabs(y[q2] - y2))), sqrt((x[q2] - x[q1]) * (x[q2] - x[q1]) + (y[q2] - y[q1]) * (y[q2] - y[q1])) - bj1);
        if (sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) <= bj1 || sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) <= bj2)
            bj3 = 0;
        else
            bj3 = min_ab(min_ab(min_ab(min_ab(fabs(x[q3] - x1), fabs(x[q3] - x2)), min_ab(fabs(y[q3] - yu), fabs(y[q3] - y2))), sqrt((x[q3] - x[q1]) * (x[q3] - x[q1]) + (y[q3] - y[q1]) * (y[q3] - y[q1])) - bj1), sqrt((x[q3] - x[q2]) * (x[q3] - x[q2]) + (y[q3] - y[q2]) * (y[q3] - y[q2])) - bj2);
        if (sqrt((x[q4] - x[q1]) * (x[q4] - x[q1]) + (y[q4] - y[q1]) * (y[q4] - y[q1])) <= bj1 || sqrt((x[q4] - x[q2]) * (x[q4] - x[q2]) + (y[q4] - y[q2]) * (y[q4] - y[q2])) <= bj2 || sqrt((x[q4] - x[q3]) * (x[q4] - x[q3]) + (y[q4] - y[q3]) * (y[q4] - y[q3])) <= bj3)
            bj4 = 0;
        else
            bj4 = min_ab(min_ab(min_ab(min_ab(min_ab(fabs(x[q4] - x1), fabs(x[q4] - x2)), min_ab(fabs(y[q4] - yu), fabs(y[q4] - y2))), sqrt((x[q4] - x[q1]) * (x[q4] - x[q1]) + (y[q4] - y[q1]) * (y[q4] - y[q1])) - bj1), sqrt((x[q4] - x[q2]) * (x[q4] - x[q2]) + (y[q4] - y[q2]) * (y[q4] - y[q2])) - bj2), sqrt((x[q4] - x[q3]) * (x[q4] - x[q3]) + (y[q4] - y[q3]) * (y[q4] - y[q3])) - bj3);
        if (sqrt((x[q5] - x[q1]) * (x[q5] - x[q1]) + (y[q5] - y[q1]) * (y[q5] - y[q1])) <= bj1 || sqrt((x[q5] - x[q2]) * (x[q5] - x[q2]) + (y[q5] - y[q2]) * (y[q5] - y[q2])) <= bj2 || sqrt((x[q5] - x[q3]) * (x[q5] - x[q3]) + (y[q5] - y[q3]) * (y[q5] - y[q3])) <= bj3 || sqrt((x[q5] - x[q4]) * (x[q5] - x[q4]) + (y[q5] - y[q4]) * (y[q5] - y[q4])) <= bj4)
            bj5 = 0;
        else
            bj5 = min_ab(min_ab(min_ab(min_ab(min_ab(min_ab(fabs(x[q5] - x1), fabs(x[q5] - x2)), min_ab(fabs(y[q5] - yu), fabs(y[q5] - y2))), sqrt((x[q5] - x[q1]) * (x[q5] - x[q1]) + (y[q5] - y[q1]) * (y[q5] - y[q1])) - bj1), sqrt((x[q5] - x[q2]) * (x[q5] - x[q2]) + (y[q5] - y[q2]) * (y[q5] - y[q2])) - bj2), sqrt((x[q5] - x[q3]) * (x[q5] - x[q3]) + (y[q5] - y[q3]) * (y[q5] - y[q3])) - bj3), sqrt((x[q5] - x[q4]) * (x[q5] - x[q4]) + (y[q5] - y[q4]) * (y[q5] - y[q4])) - bj4);
        if (sqrt((x[q6] - x[q1]) * (x[q6] - x[q1]) + (y[q6] - y[q1]) * (y[q6] - y[q1])) <= bj1 || sqrt((x[q6] - x[q2]) * (x[q6] - x[q2]) + (y[q6] - y[q2]) * (y[q6] - y[q2])) <= bj2 || sqrt((x[q6] - x[q3]) * (x[q6] - x[q3]) + (y[q6] - y[q3]) * (y[q6] - y[q3])) <= bj3 || sqrt((x[q6] - x[q4]) * (x[q6] - x[q4]) + (y[q6] - y[q4]) * (y[q6] - y[q4])) <= bj4 || sqrt((x[q6] - x[q5]) * (x[q6] - x[q5]) + (y[q6] - y[q5]) * (y[q6] - y[q5])) <= bj5)
            bj6 = 0;
        else
            bj6 = min_ab(min_ab(min_ab(min_ab(min_ab(min_ab(min_ab(fabs(x[q6] - x1), fabs(x[q6] - x2)), min_ab(fabs(y[q6] - yu), fabs(y[q6] - y2))), sqrt((x[q6] - x[q1]) * (x[q6] - x[q1]) + (y[q6] - y[q1]) * (y[q6] - y[q1])) - bj1), sqrt((x[q6] - x[q2]) * (x[q6] - x[q2]) + (y[q6] - y[q2]) * (y[q6] - y[q2])) - bj2), sqrt((x[q6] - x[q3]) * (x[q6] - x[q3]) + (y[q6] - y[q3]) * (y[q6] - y[q3])) - bj3), sqrt((x[q6] - x[q4]) * (x[q6] - x[q4]) + (y[q6] - y[q4]) * (y[q6] - y[q4])) - bj4), sqrt((x[q6] - x[q5]) * (x[q6] - x[q5]) + (y[q6] - y[q5]) * (y[q6] - y[q5])) - bj5);
        the_max_num = max_ab(the_max_num, bj1 * bj1 * 3.1415926 + bj2 * bj2 * 3.1415926 + bj3 * bj3 * 3.1415926 + bj4 * bj4 * 3.1415926 + bj5 * bj5 * 3.1415926 + bj6 * bj6 * 3.1415926);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    cin >> x1 >> yu >> x2 >> y2;
    for (int i = 1; i <= n; i++)
        cin >> x[i] >> y[i];
    switch (n)
    {
    case 1:
        sc(n, 1, 0, 0, 0, 0, 0);
        break;
    case 2:
        for (int i1 = 1; i1 <= n; i1++)
            for (int i2 = 1; i2 <= n; i2++)
            {
                if (i2 == i1)
                    continue;
                sc(n, i1, i2, 0, 0, 0, 0);
            }
        break;
    case 3:
        for (int i1 = 1; i1 <= n; i1++)
            for (int i2 = 1; i2 <= n; i2++)
            {
                if (i2 == i1)
                    continue;
                for (int i3 = 1; i3 <= n; i3++)
                {
                    if (i3 == i1 || i3 == i2)
                        continue;
                    sc(n, i1, i2, i3, 0, 0, 0);
                }
            }
        break;
    case 4:
        for (int i1 = 1; i1 <= n; i1++)
            for (int i2 = 1; i2 <= n; i2++)
            {
                if (i2 == i1)
                    continue;
                for (int i3 = 1; i3 <= n; i3++)
                {
                    if (i3 == i1 || i3 == i2)
                        continue;
                    for (int i4 = 1; i4 <= n; i4++)
                    {
                        if (i4 == i1 || i4 == i2 || i4 == i3)
                            continue;
                        sc(n, i1, i2, i3, i4, 0, 0);
                    }
                }
            }
        break;
    case 5:
        for (int i1 = 1; i1 <= n; i1++)
            for (int i2 = 1; i2 <= n; i2++)
            {
                if (i2 == i1)
                    continue;
                for (int i3 = 1; i3 <= n; i3++)
                {
                    if (i3 == i1 || i3 == i2)
                        continue;
                    for (int i4 = 1; i4 <= n; i4++)
                    {
                        if (i4 == i1 || i4 == i2 || i4 == i3)
                            continue;
                        for (int i5 = 1; i5 <= n; i5++)
                        {
                            if (i5 == i1 || i5 == i2 || i5 == i3 || i5 == i4)
                                continue;
                            sc(n, i1, i2, i3, i4, i5, 0);
                        }
                    }
                }
            }
        break;
    case 6:
        for (int i1 = 1; i1 <= n; i1++)
            for (int i2 = 1; i2 <= n; i2++)
            {
                if (i2 == i1)
                    continue;
                for (int i3 = 1; i3 <= n; i3++)
                {
                    if (i3 == i1 || i3 == i2)
                        continue;
                    for (int i4 = 1; i4 <= n; i4++)
                    {
                        if (i4 == i1 || i4 == i2 || i4 == i3)
                            continue;
                        for (int i5 = 1; i5 <= n; i5++)
                        {
                            if (i5 == i1 || i5 == i2 || i5 == i3 || i5 == i4)
                                continue;
                            for (int i6 = 1; i6 <= n; i6++)
                            {
                                if (i6 == i1 || i6 == i2 || i6 == i3 || i6 == i4 || i6 == i5)
                                    continue;
                                sc(n, i1, i2, i3, i4, i5, i6);
                            }
                        }
                    }
                }
            }
        break;
    }
    cout << (int)round(fabs(x1 - x2) * fabs(yu - y2) - the_max_num);
    return 0;
}
double max_ab(double x, double y)
{
    return (x > y ? x : y);
}
double min_ab(double x, double y)
{
    return (x > y ? y : x);
}