POJ 3301 Texas Trip (三分)
来源:互联网 发布:直销会员管理系统源码 编辑:程序博客网 时间:2024/05/17 06:57
POJ 3301 Texas Trip (三分)
ACM
题目地址:
POJ 3301 Texas Trip
题意:
给定二维平面的n个点,要求一个面积最小的正方形,使其能覆盖所有的点。
分析:
去求凸包你就输了...
我们可以让正方形不要动,所有点进行旋转变换,这样结果是不会变形的。
变形即: x1=x*cos(a)-y*sin(a); y1=x*sin(a)+y*cos(a)
本来想暴力看看的,后来发现是三分的,证明引用巨巨的:
可以证明它们都是凸性函数,故他们差的最大值也是凸性函数,故可以用三分法,对旋转角度进行三分,求出最小的满足要求的正方形,详细过程见代码。
交了几发,再次验证了:g++的double输出默认是用%f的。
代码:
/** Author: illuz <iilluzen[at]gmail.com>* File: 3301.cpp* Create Date: 2014-09-18 09:25:04* Descripton: triple*/#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;#define repf(i,a,b) for(int i=(a);i<=(b);i++)typedef long long ll;const int N = 31;const double PI = acos(-1.0);const double EPS = 1e-12;int t, n;double x[N], y[N];inline double calc(double a) {double minx = 1000, miny = 1000, maxx = -1000, maxy = -1000;double xx, yy;repf (i, 1, n) {xx = x[i] * cos(a) - y[i] * sin(a);yy = x[i] * sin(a) + y[i] * cos(a);minx = min(minx, xx);maxx = max(maxx, xx);miny = min(miny, yy);maxy = max(maxy, yy);}return max(maxx - minx, maxy - miny);}int main() {ios_base::sync_with_stdio(0);double l, r, mid, mmid, ans;cin >> t;while (t--) {cin >> n;repf (i, 1, n) {cin >> x[i] >> y[i];}l = 0.0;r = PI;while (r - l > EPS) {mid = (l + r) / 2;mmid = (mid + r) / 2;ans = calc(mid);if (ans <= calc(mmid))r = mmid;elsel = mid;}printf("%.2f\n", ans * ans);// brute force//ans = 1000;//for (double i = 0.0; i <= PI; i += 0.00005)//ans = min(ans, calc(i));//printf("%.2lf\n", ans * ans);}return 0;}
1 0
- POJ 3301 Texas Trip (三分)
- POJ 3301 Texas Trip(三分)
- poj 3301 Texas Trip (三分)
- poj 3301 Texas Trip 三分
- POJ 3301 Texas Trip(三分)
- POJ 3301 Texas Trip(三分)
- 三分 --- POJ 3301 Texas Trip
- 【POJ 3301】 三分 Texas Trip
- Texas Trip+POJ+三分
- POJ 3301 Texas Trip (三分求极限)
- POJ 3301 Texas Trip(最小正方形覆盖+三分)
- poj 3301 Texas Trip (三分求极值)
- Poj 3301 Texas Trip (三分搜索)
- POJ 3301 Texas Trip(三分枚举)
- poj 3301 Texas Trip 三分搜索
- poj 3301 Texas Trip(旋转+三分)
- POJ 3301 Texas Trip(三分求最小值)
- poj3301 Texas Trip (三分)
- 【自考】网络经济与企业管理(二)——章节详读
- 多态与重载
- ReportStudio进阶教程(一) - 条件样式:根据属性显示不同的样式
- UVA 694 The Collatz Sequence
- Linux下格式化U盘
- POJ 3301 Texas Trip (三分)
- czmq(zmq)安装
- 最简单的使用MD5加密算法对数据进行加密
- 编程基本知识--观察者模式
- 去除inline和inline-block元素的间距的五个方法
- dblink的查看创建与删除
- Android生存指南:Eclipse快捷键
- 控件显示乱码
- LINUX中断机制与信号