题目链接:点击打开链接

题目大意:给出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. 基于 bootstrap 的数据展示--bootgrid 样式改动。

    bootgrid 的官网案例 http://www.jquery-bootgrid.com/Examples 官方demo 样式 基于项目须要,取消了一些不须要 的功能,改动了源代码 最后样式成了这样 ...

  2. 【转帖】如何利用Spring Cloud构建起自我修复型分布式系统

    http://zhidao.baidu.com/link?url=tSKwdn3wr8KUxWMteHmneFtY0KoNZBMK9Xy-RimsdISA4h2neAecgHqggBipz2w6nXr ...

  3. 【LeetCode】90. Subsets II (2 solutions)

    Subsets II Given a collection of integers that might contain duplicates, S, return all possible subs ...

  4. C#:数据库操作(待补充)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  5. 解决C# WINFORM程序只允许运行一个实例的几种方法详解

    要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现: 方法一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例. 把program.cs文件里的Main()函数改为如下代码: u ...

  6. SQLyog之MySQL客户端的下载、安装和使用(企业版)(破解)

    本博文的主要内容有 .SQLyog的下载 .SQLyog的安装 .SQLyog的使用 1.SQLyog_Enterprise的下载 比如,我这里,是放在D:\SoftWare 继续

  7. AutoFac文档14(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 激活事件 在compo ...

  8. centos 无法ping内网 Destination Host Unreachable

    centos 突然无法ping内网了. 本来是一直是好好的. 在这之前,当前服务器(centos 192.168.1.30)大量的在操作内网192.168.1.20服务器的数据库.. 会不会是流量大了 ...

  9. 从零开始,跟我一起做jblog项目(二)Maven

    从零开始,跟我一起做jblog项目(一)引言 从零开始,跟我一起做jblog项目(二)Maven maven是一个项目管理工具,尤其适用于JAVA世界 在jblog的开发前期,还没有系统使用过mave ...

  10. 安装CentOS版本的yum(转载)

    安装CentOS版本的yum 下载源:http://mirrors.163.com/centos/6/os/i386/Packages/ 材料准备: python-iniparse-0.3.1-2.1 ...