听清零的话

· · 个人记录

直接放题目了 P1927 防护伞

这道题就相对来说涉及亿点数学了,也就是求距离函数(应该都学过)

当时我的思路是这样的:

一个个枚举半径找出最大值,再找面积最小值

# include <bits/stdc++.h>

using namespace std;

int n, x[1005], y[1005];
double pi = 3.1415926535, s = INT_MAX, maxx = INT_MIN;

double l(int xa, int xb, int ya, int yb)
{
    return sqrt((xa - xb) * (xa - xb) + (ya - yb) * (ya - yb));
}

int main()
{

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> x[i] >> y[i];
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++) maxx = max(maxx, l(x[i], x[j], y[i], y[j]));
        s = min(s, maxx * maxx * pi);
    }
    cout << fixed << setprecision(4) << s;

    return 0;

}

样例过了,但提交爆 0,我百思不得其解,最后在题解中发现:我忘了清零 maxx……

论为什么不清零过不了测试点

黑子距离较远,而另一个黑子刚好能包住这两个黑子的时候,如果清零,那么代码就会以这两个距离最远的黑子为半径,画一个圆,面积就比题目要求的大得多。

所以必须清零,保证找到最小面积。