转自http://hi.baidu.com/vfxupdpaipbcpuq/item/81b21d1910ea729c99ce33db
UVALive 5009
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
POJ 3301
struct Point
{
double x, y;
Point() {}
Point(double t_x, double t_y): x(t_x), y(t_y){}
}p[40];
int T, n;
double get_ans(double angle)
{
double max_x, max_y, min_x, min_y;
max_x = max_y = -inf;
min_x = min_y = inf;
for(int i = 0; i < n; ++i)
{
double t_x = p[i].x * cos(angle) - p[i].y * sin(angle);
double t_y = p[i].x * sin(angle) + p[i].y * cos(angle);
if(t_x > max_x)
max_x = t_x;
if(t_y > max_y)
max_y = t_y;
if(t_x < min_x)
min_x = t_x;
if(t_y < min_y)
min_y = t_y;
}
return max((max_x-min_x)*(max_x-min_x), (max_y-min_y)*(max_y-min_y));
}
int main()
{
//freopen("aa.in", "r", stdin);
//freopen("bb.out", "w", stdout);
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i = 0; i < n; ++i)
{
scanf("%lf %lf", &p[i].x, &p[i].y);
}
double l = 0, r = asin(1.0), m1, m2;
while(l + eps < r)
{
m1 = l + (r - l) / 3;
m2 = r - (r - l) / 3;
if(get_ans(m1) >= get_ans(m2))
l = m1;
else
r = m2;
}
printf("%.2lf\n", get_ans(l));
}
return 0;
}
HDU 3400
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
HDU 4717
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include