uva12307(旋转卡壳)
省选前练模板系列
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=,inf=1e9;
const double eps=1e-;
int dcmp(double a, double b)
{
if (a < b - eps) return -;
else if (a > b + eps) return ;
else return ;
}
struct vec{
double x,y,ang;
vec(){};
vec(double a,double b){x=a,y=b;}
vec operator-(vec a){return vec(x-a.x,y-a.y);}
vec operator+(vec a){return vec(x+a.x,y+a.y);}
bool operator<(const vec&p) const
{
return dcmp(x,p.x)< || (dcmp(x,p.x)== && y < p.y);
}
}p[maxn],ch[maxn];
int n,m,pp,mi,k;
double A,P;
double cross(vec a,vec b){return a.x*b.y-b.x*a.y;}
double dot(vec a,vec b){return a.x*b.x+a.y*b.y;}
double dis(vec a,vec b){return sqrt((double)dot(a-b,a-b));}
int main(){
while(scanf("%d",&n)!=EOF&&n){
m=;A=1e15;P=1e15;
for(int i=;i<n;++i){
scanf("%lf%lf",&p[i].x,&p[i].y);
}
sort(p,p+n);
for(int i=;i<n;++i){
while(m>&&cross(ch[m-]-ch[m-],p[i]-ch[m-])<=)m--;
ch[m++]=p[i];
}
k=m;
for(int i=n-;i>=;--i){
while(m>k&&cross(ch[m-]-ch[m-],p[i]-ch[m-])<=)m--;
ch[m++]=p[i];
}
if(n>)--m;
for(int i=;i<m;++i)cout<<ch[i].x<<' '<<ch[i].y<<endl;
ch[m]=ch[];
int t=,l=,r=;
for(int b=;b<m;++b){
while(cross(ch[b+]-ch[b],ch[t+]-ch[t])>eps)t=(t+)%m;
while(dot(ch[b+]-ch[b],ch[r+]-ch[r])>eps)r=(r+)%m;
if(b==)l=(r+)%m;
while(dot(ch[b+]-ch[b],ch[l+]-ch[l])<-eps)l=(l+)%m;
double d=dis(ch[b+],ch[b]);
double h=(double)cross(ch[b+]-ch[b],ch[t]-ch[b])/d;
double w=(double)(dot(ch[r]-ch[b],ch[b+]-ch[b])-dot(ch[b+]-ch[b],ch[l]-ch[b]))/d;
A=min(A,*(h+w));P=min(P,h*w);
}
printf("%.2lf %.2lf\n",P,A);
}
return ;
}
/*
*/
uva12307(旋转卡壳)的更多相关文章
- 1393: Robert Hood 旋转卡壳 凸包
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1393 http://poj.org/problem?id=2187 Beauty Contest ...
- POJ 3608 Bridge Across Islands --凸包间距离,旋转卡壳
题意: 给你两个凸包,求其最短距离. 解法: POJ 我真的是弄不懂了,也不说一声点就是按顺时针给出的,不用调整点顺序. 还是说数据水了,没出乱给点或给逆时针点的数据呢..我直接默认顺时针给的点居然A ...
- 【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳
因为凸壳上对踵点的单调性所以旋转卡壳线性绕一圈就可以啦啦啦--- 先求凸包,然后旋转卡壳记录$sum1$和$sum2$,最后统计答案就可以了 #include<cmath> #includ ...
- 【POJ 2187】Beauty Contest(凸包直径、旋转卡壳)
给定点集的最远两点的距离. 先用graham求凸包.旋(xuán)转(zhuàn)卡(qiǎ)壳(ké)求凸包直径. ps:旋转卡壳算法的典型运用 http://blog.csdn.net/hanch ...
- 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2707 Solved: 1053[Submit][Sta ...
- [USACO2003][poj2187]Beauty Contest(凸包+旋转卡壳)
http://poj.org/problem?id=2187 题意:老题了,求平面内最远点对(让本渣默默想到了悲剧的AHOI2012……) 分析: nlogn的凸包+旋转卡壳 附:http://www ...
- 【POJ】2187 Beauty Contest(旋转卡壳)
http://poj.org/problem?id=2187 显然直径在凸包上(黑书上有证明).(然后这题让我发现我之前好几次凸包的排序都错了QAQ只排序了x轴.....没有排序y轴.. 然后本题数据 ...
- 【BZOJ】1069: [SCOI2007]最大土地面积(凸包+旋转卡壳)
http://www.lydsy.com/JudgeOnline/problem.php?id=1069 显然这四个点在凸包上,然后枚举两个点找上下最大的三角形即可. 找三角形表示只想到三分QAQ.. ...
- hdu 3934&&poj 2079 (凸包+旋转卡壳+求最大三角形面积)
链接:http://poj.org/problem?id=2079 Triangle Time Limit: 3000MS Memory Limit: 30000K Total Submissio ...
随机推荐
- Java框架spring 学习笔记(五):Bean定义继承
子 bean 的定义继承父定义的配置数据.子定义可以根据需要重写一些值,或者添加其他值. 编写HelloWorld.java package com.example.spring; public cl ...
- 【笔记】Python基础四:迭代器和生成器
一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...
- java实现将指定文件夹里所有文件路径输出到指定文件作为参数化文件给lr脚本使用
java实现将指定文件夹里所有文件路径输出到指定文件作为参数化文件给lr脚本使用 import java.io.BufferedReader; import java.io.BufferedWrite ...
- java 中拿项目路径
public class ItemPathInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHan ...
- easyUI添加修改tab页(toolbar)
代码: <div id="editdialos" class="easyui-dialog" title="虚机配置修改" data- ...
- easyui的datagrid改变整行颜色
easyui的datagrid改变单元格颜色方法1:https://www.cnblogs.com/raitorei/p/10395233.html easyui的datagrid改变单元格颜色方法2 ...
- ios下,<input type="checkbox"> 点击时出现黑色块
ios下,<input type="checkbox"> 点击时出现黑色块如下图 解决方法:
- laravel的路由设置,路由参数和路由命名(三)
laravel中必须先配置路由,才能使用.不像tp中不配置也能使用,因为tp可以通过pathinfo进行自动解析. 一.简单的路由设置 我们一般在routes/web.php文件中配置网页端路由. / ...
- 警惕32位程序在MethodImplOptions.Synchronized在x64机器上的同步缺陷[z]
https://www.cnblogs.com/junchu25/archive/2012/08/10/2631422.html 上周四产品上线一切运行正常,做了一点小改动后周四晚上发布,周五大量用户 ...
- Linux驱动之内核自带的S3C2440的LCD驱动分析
先来看一下应用程序是怎么操作屏幕的:Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户 ...