POJ 3301 三分(最小覆盖正方形)
题意:
给你n个点,让你找一个最小的正方形去覆盖所有点。
思路:
想一下,如果题目中规定正方形必须和x轴平行,那么我们是不是直接找到最大的x差和最大的y差取最大就行了,但是这个题目没说平行,那么我们就旋转这个正方形,因为是凸性(或者凹性)用三分去枚举正方形的角度[0,PI/2],然后缩小范围,知道找到答案。公式是
nowx = x * cos(du) - y * sin(d) nowy = x * sin(du) + y *cos(d)
#include<stdio.h>
#include<math.h>#define N 50
#define eps 0.000001double PI = acos(-1.0);typedef struct
{double x ,y;
}NODE;NODE node[N];double maxx(double x ,double y)
{return x > y ? x : y;
}double minn(double x ,double y)
{return x < y ? x : y;
}double abss(double x)
{return x < 0 ? -x : x;
}double now(double phi ,int n)
{double Max_x = -100000000 ,Min_x = 100000000;double Max_y = -100000000 ,Min_y = 100000000;for(int i = 1 ;i <= n ;i ++){double xx = node[i].x * cos(phi) - node[i].y * sin(phi);double yy = node[i].x * sin(phi) + node[i].y * cos(phi);Max_x = maxx(xx ,Max_x);Max_y = maxx(yy ,Max_y);Min_x = minn(Min_x ,xx);Min_y = minn(Min_y ,yy);}return maxx((Max_x - Min_x) ,(Max_y - Min_y));
}int main ()
{int t ,n ,i;double low ,mid ,mmid ,up ,ans;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);for(i = 1 ;i <= n ;i ++)scanf("%lf %lf" ,&node[i].x ,&node[i].y);low = 0 ,up = PI / 2.0;while(1){mid = (low + up) / 2.0;mmid = (mid + up) / 2.0;double dis1 = now(mid ,n);double dis2 = now(mmid ,n);if(dis1 < dis2) up = mmid;else low = mid;if(abss(dis1 - dis2) < eps)break;ans = minn(dis1 ,dis2);}printf("%.2lf\n" ,ans * ans);}return 0;
}
POJ 3301 三分(最小覆盖正方形)相关推荐
- POJ - 2002 Squares 数正方形【二分】【哈希表】
Squares POJ - 2002 题意 平面上有N个点,任取4个点,求能组成正方形的不同组合方式有多少种:相同的四个点,不同顺序构成的正方形视为同一正方形 分析 做法1 先枚举两个点,通过计算得到 ...
- POJ 2226 二分图最小覆盖
题意: 思路: 把横着的连通块放在一个集合 竖着的放在一个集合 如果有交 就连边 求最小覆盖即可 (数值上等于最大匹配) //By SiriusRen #include <cstdio> ...
- POJ 计算几何入门题目推荐
其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...
- poj计算几何题推荐
POJ 计算几何入门题目推荐(转) 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...
- POJ 计算几何入门题目推荐(转)
POJ 计算几何入门题目推荐(转) 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...
- 【专题】三分法和牛顿迭代法总结
下面总结两种迭代方法:三分法和牛顿迭代 1.三分法 二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值.但当函数是凸性函数时,二分法就无法适用,这时三分法就可以大显身手. 如下凸函数: 类 ...
- 技巧专题1(二分、三分、位运算)
二分 二分答案一般有以下的一些特征: A. 候选答案在区间[min,max]上按照某种属性有序,一般枚举复杂度较高. B. 容易判断某个点是否为可行 最大值最小. 判断一个东西是否在一个有序集合中出现 ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- 计算几何相关资料+题目推荐(不定期补充)
旋转卡壳:http://blog.csdn.net/accry/article/details/6070626 计算几何题目推荐:http://blog.csdn.net/accry/article/ ...
最新文章
- mysql 多线程_数据库选型之MySQL(多线程并发)
- COM:下一代微生物组技术在作物生产中的应用——局限性以及基于知识的解决方案的需求
- Servlet、Filter、Listener、Interceptor基础
- Unity3d之AssetBundle打包与读取
- 代码的坏味道:控制结构嵌套太深
- 【SpringCloud】Spring cloud Alibaba seata 分布式事务
- 我是一个尝试做自媒体的程序员
- 计算机软件著作权登记怎么填写,计算机软件著作权登记申请表填写说明
- python抓取图片数字_Python OCR提取普通数字图形验证中的数字
- PMP学习笔记之四 第三章 单个项目管理过程
- (美)梅耶(Myers, G. J.) 等《软件测试的艺术(原书第3版)》书籍(第3版)
- javaWeb框架开发
- SpringCloud项目 CICD 部署
- 识别中文_关于开展中文语音识别和语音合成基础服务可信评估的通知
- android移动应用开发答案,Android移动应用开发习题答案.pdf
- 怎样给图片降噪?这几个图片降噪软件可以帮助你
- Python 强化学习实用指南:1~5
- ‘DatePicker.RangePicker‘ cannot be used as a JSX component.
- Idea导包正确还是显示标红(错误)
- DATEDIFF 函数的使用