题目链接:点击打开链接

题目大意:给出n个点的坐标。如今要求一个正方形,全然包围n个点。而且正方形面积最小,求最小的正方形面积。

表示不能理解为什么面积随着角度的变化是一个单峰的函数,等待大牛告诉一下,,。

假设面积随角度变化是单峰的函数。那么自然就能够想到是三分,依照题目要求求正方形最小的面积,假设正方形是平行于x轴的,那么正方形面积是x的最大距离*y的最大的距离。然后旋转正方形。在0到90度内总会找到一个正方形面积的最小值,,,可是旋转正方形比較麻烦,我们能够考虑旋转坐标系,将做坐标系旋转0到90度。按旋转的角度又一次计算各点的坐标。然后找出x的差和y的差,计算面积。

由于是单峰的函数,所以用三分角度,找到一个最小的面积。

注意:三分的eqs要非常小,,。。,

角度旋转公式x = x*cos(j) - y*sin(j) ; y = x*sin(j) + y*cos(j) ;

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std ;
#define eqs 1e-12
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
struct node{
double x , y ;
}p[35];
int n ;
double maxx , minx , maxy , miny ;
double f(double j) {
int i ;
double x , y ;
maxx = maxy = -INF ;
minx = miny = INF ;
for(i = 0 ; i < n ; i++) {
x = p[i].x*cos(j) - p[i].y*sin(j) ;
y = p[i].x*sin(j) + p[i].y*cos(j) ;
maxx = max(maxx,x) ;
minx = min(minx,x) ;
maxy = max(maxy,y) ;
miny = min(miny,y) ;
}
return max( maxx-minx,maxy-miny ) ;
}
int main() {
int t , i ;
scanf("%d", &t) ;
while( t-- ) {
scanf("%d", &n) ;
for(i = 0 ; i < n ; i++) {
scanf("%lf %lf", &p[i].x, &p[i].y) ;
}
double low = 0.0 , mid1 , mid2 , high = PI/2.0;
while( low + eqs < high ) {
mid1 = (low + high)/2.0 ;
mid2 = (mid1 + high) / 2.0 ;
if( f(mid1) > f(mid2) )
low = mid1 ;
else
high = mid2 ;
}
low = f(low) ;
printf("%.2lf\n", low*low ) ;
}
return 0 ;
}

poj3301--Texas Trip(最小正方形覆盖)的更多相关文章

  1. poj3301 Texas Trip【三分算法】

    题目地址:http://poj.org/problem?id=3301 简述:T组测试数据,每组线输入n,代表有n个点,接下来输入这n个点的坐标,坐标都是整数. 要求用一个最小的正方形覆盖所有的点,输 ...

  2. POJ3301 Texas Trip 计算几何、随机化贪心

    传送门--Vjudge 三分写法似乎有问题,可以去Udebug上看Morass的\(666\)个测试点的数据,我的乱搞有很多比正解答案小,但还是能在SPOJ和POJ过,可见数据之水. 可以对正方形的角 ...

  3. 三分 --- POJ 3301 Texas Trip

    Texas Trip Problem's Link:   http://poj.org/problem?id=3301 Mean: 给定n(n <= 30)个点,求出包含这些点的面积最小的正方形 ...

  4. POJ 3301 Texas Trip (三分)

    题目链接 题意 : 给你若干个点,让你找最小的正方形覆盖这所有的点.输出面积. 思路 : 三分枚举正方形两对边的距离,然后求出最大,本题用的是旋转正方形,也可以用旋转点,即点的相对位置不变. 正方形从 ...

  5. POJ 3301 Texas Trip

    题目大意: 在二维坐标系中给出一些点.求能覆盖他们的最小正方形的面积(正方形的边不一定平行坐标轴) 解题思路: 对于一个点.若坐标轴旋转a度(弧度制).那么X'=X*cos(a)-Y*sin(a);Y ...

  6. hdu5251最小矩形覆盖

    题意(中问题直接粘吧)矩形面积 Problem Description 小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些矩形包围起来的面积最小的矩形的面积是多少.   Input ...

  7. 【HDU1960】Taxi Cab Scheme(最小路径覆盖)

    Taxi Cab Scheme Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. loj 1429(可相交的最小路径覆盖)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1429 思路:这道题还是比较麻烦的,对于求有向图的可相交的最小路径覆盖,首先要解决成环问 ...

  9. 【HDU3861 强连通分量缩点+二分图最小路径覆盖】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 题目大意:一个有向图,让你按规则划分区域,要求划分的区域数最少. 规则如下:1.有边u到v以及有 ...

随机推荐

  1. Vertica7 Native Connection Load Balance

    原文链接:Vertica7 Native Connection Load Balance 在Vertica7曾经的版本号中,Vertica是通过Linux的Virtual IP来实现连接的负载均衡的, ...

  2. Spring 基于Aspectj切面表达式

    package com.proc; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; im ...

  3. 公司交换机arp 绑定操作

    1.首先登入:192.168.1.1 2.sys 3.dis arp | inc 192.168.1.49(查看该ip绑定情况) 4.undo arp 192.168.1.49(不绑定命令)

  4. 【mysql】主键、普通索引、唯一索引和全文索引的比较

    YSQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记 ...

  5. PLSQL Split分割字符串

    系统自带的split,使用起来方便,但是如果字符串太长,可能会出现异常,这里,我自己写了一个也是该名字,放在自己的包中,引用的时候带包名就好了. --系统自带的函数 /*CURSOR cur_temp ...

  6. JavaScript:使用JavaScript 实现注册表单的校验

    说明:在点击提交时进行表单校验,具体要求如下: 1)用户名为3~16个字符,且不能包含”@”和”#”字符: 2)密码和校验密码必须一致,且长度在8个字符到16个字符: 3)兴趣爱好至少选择一项: 4) ...

  7. FFmpeg音视频同步示例

    原文地址:https://my.oschina.net/u/555002/blog/79324 前面整个的一段时间,我们有了一个几乎无用的电影播放器.当然,它能播放视频,也能播放音频,但是它还不能被称 ...

  8. C与C++中非常少犯的错误,犯了后却非常难找出的错误

    1.continue,break类的错误(HDU1877): #include<iostream> using namespace std; int main() { int a,b,m, ...

  9. DevExpress实现GridControl删除所有行的方法

    /// <summary> /// 删除全部行 /// </summary> /// <param name="gridView">GridVi ...

  10. <class 'Salesman.admin.UsrUserAdmin'>: (admin.E012) There are duplicate field(s) in 'fieldsets[0][1]'.

    ieldsets = ( ['Main', { 'fields': ('user_name', 'real_name', 'concat_name','phone_no','charge_person ...