听清零的话
直接放题目了 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……
论为什么不清零过不了测试点
当黑子距离较远,而另一个黑子刚好能包住这两个黑子的时候,如果清零,那么代码就会以这两个距离最远的黑子为半径,画一个圆,面积就比题目要求的大得多。
所以必须清零,保证找到最小面积。