http://www.lydsy.com/JudgeOnline/problem.php?id=1185

题解去看它

http://www.cnblogs.com/TheRoadToTheGold/p/8253800.html

精度真是卡的我醉生梦死,w(゚Д゚)w    O(≧口≦)O

bzoj改成long double 就过了

洛谷仍处于

输出x.99999,答案输出x+1.00000

输出-0.00000,答案输出0.00000

救命啊~~~~(>_<)~~~~

来自大佬的建议:输出double时用%f

#include<cmath>
#include<cstdio>
#include<algorithm> #define N 50001 using namespace std; const long double eps=1e-; int dcmp(long double x)
{
if(fabs(x)<eps) return ;
return x< ? - : ;
} struct Point
{
long double x,y; Point(long double x=,long double y=) : x(x),y(y) { } bool operator < (Point p) const
{
if(!dcmp(x-p.x)) return y<p.y;
return x<p.x;
} bool operator == (Point p) const
{
return !dcmp(x-p.x) && !dcmp(y-p.y);
}
}; typedef Point Vector; Point P[N],C[N]; Point AnsP[]; Vector operator + (Vector A,Vector B) { return Vector(A.x+B.x,A.y+B.y); }
Vector operator - (Vector A,Vector B) { return Vector(A.x-B.x,A.y-B.y); }
Vector operator * (Vector A,double q) { return Vector(A.x*q,A.y*q); } long double Cross(Vector A,Vector B)
{
return A.x*B.y-A.y*B.x;
} long double Area2(Point A,Point B,Point D)
{
return Cross(B-A,D-A);
} long double Dot(Vector A,Vector B)
{
return A.x*B.x+A.y*B.y;
} long double Length(Vector A)
{
return sqrt(Dot(A,A));
} int ConvexHull(Point *p,int n,Point *c)
{
sort(p,p+n);
n=unique(p,p+n)-p;
int m=;
for(int i=;i<n;++i)
{
while(m> && Cross(c[m-]-c[m-],p[i]-c[m-])<=) m--;
c[m++]=p[i];
}
int k=m;
for(int i=n-;i>=;--i)
{
while(m>k && Cross(c[m-]-c[m-],p[i]-c[m-])<=) m--;
c[m++]=p[i];
}
m--;
return m;
} long double getdis(Point A,Point B)
{
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
} void RotatingCaliper(Point *c,int m)
{
long double AnsArea=1e20,AnsPeri=1e20;
int q=,l=,r=;
long double d,h,w,rw;
for(int p=;p<m;++p)
{
while(fabs(Cross(c[p]-c[p+],c[q+]-c[p+]))>fabs(Cross(c[p]-c[p+],c[q]-c[p+]))) q=(q+)%m;
while(dcmp(Dot(c[p+]-c[p],c[r+]-c[r]))>)
r=(r+)%m;
if(!l) l=q;
while(dcmp(Dot(c[p+]-c[p],c[l+]-c[l]))<)
l=(l+)%m;
d=Length(c[p+]-c[p]);
h=fabs(Area2(c[p],c[p+],c[q]))/d;
w=Dot(c[p+]-c[p],c[r]-c[l])/d;
rw=Dot(c[r]-c[p],c[p+]-c[p])/d;
if(w*h<AnsArea)
{
AnsArea=w*h;
AnsP[]=c[p]+(c[p+]-c[p])*(rw/d);
AnsP[]=AnsP[]+(c[r]-AnsP[])*(h/getdis(c[r],AnsP[]));
AnsP[]=AnsP[]+(c[q]-AnsP[])*(w/getdis(c[q],AnsP[]));
AnsP[]=AnsP[]+(c[l]-AnsP[])*(h/getdis(c[l],AnsP[]));
}
}
double out=AnsArea;
printf("%.5lf\n",out);
} bool less(Point A,Point B)
{
if(!dcmp(A.y-B.y)) return A.x<B.x;
return A.y<B.y;
} int main()
{
int n,m;
scanf("%d",&n);
double x,y;
for(int i=;i<n;++i)
{
scanf("%lf%lf",&x,&y);
P[i]=Point(x,y);
}
m=ConvexHull(P,n,C);
RotatingCaliper(C,m);
int s=;
for(int i=;i<;++i)
if(less(AnsP[i],AnsP[s])) s=i;
double outx,outy;
for(int i=;i<;++i)
{
if(!dcmp(AnsP[(i+s)%].x)) AnsP[(i+s)%].x=;
if(!dcmp(AnsP[(i+s)%].y)) AnsP[(i+s)%].y=;
outx=AnsP[(i+s)%].x+eps;
outy=AnsP[(i+s)%].y+eps;
printf("%.5lf %.5lf\n",outx,outy);
}
}

bzoj千题计划209:bzoj1185: [HNOI2007]最小矩形覆盖的更多相关文章

  1. BZOJ1185[HNOI2007] 最小矩形覆盖(旋转卡壳)

    BZOJ1185[HNOI2007] 最小矩形覆盖 题面 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形,输出所求矩形的面积和四个顶点的坐标 分析 首先可以先求凸包,因为覆盖了凸包上的顶点,凸 ...

  2. bzoj1185 [HNOI2007]最小矩形覆盖 旋转卡壳求凸包

    [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 2081  Solved: 920 ...

  3. BZOJ1185 [HNOI2007]最小矩形覆盖 【旋转卡壳】

    题目链接 BZOJ1185 题解 最小矩形一定有一条边在凸包上,枚举这条边,然后旋转卡壳维护另外三个端点即可 计算几何细节极多 维护另外三个端点尽量不在这条边上,意味着左端点尽量靠后,右端点尽量靠前, ...

  4. [BZOJ1185][HNOI2007]最小矩形覆盖-[凸包+旋转卡壳]

    Description 传送门 Solution 感性理解一下,最小矩形一定是由一条边和凸包上的边重合的. 然后它就是模板题了..然而真的好难调,小于大于动不动就打错. Code #include&l ...

  5. 2018.10.18 bzoj1185: [HNOI2007]最小矩形覆盖(旋转卡壳)

    传送门 不难看出最后的矩形一定有一条边与凸包某条边重合. 因此先求出凸包,然后旋转卡壳求出当前最小矩形面积更新答案. 代码: #include<bits/stdc++.h> #define ...

  6. BZOJ1185 : [HNOI2007]最小矩形覆盖

    求出凸包后,矩形的一条边一定与凸包的某条边重合. 枚举每条边,求出离它最远的点和离它最左最右的点,因为那三个点是单调变化的,所以复杂度为$O(n)$. 注意精度. #include<cstdio ...

  7. BZOJ1185 HNOI2007 最小矩形覆盖 凸包、旋转卡壳

    传送门 首先,肯定只有凸包上的点会限制这个矩形,所以建立凸包. 然后可以知道,矩形上一定有一条边与凸包上的边重合,否则可以转一下使得它重合,答案会更小. 于是沿着凸包枚举这一条边,通过旋转卡壳找到离这 ...

  8. 【BZOJ1185】[HNOI2007]最小矩形覆盖(凸包,旋转卡壳)

    [BZOJ1185][HNOI2007]最小矩形覆盖(凸包,旋转卡壳) 题面 BZOJ 洛谷 题解 最小的矩形一定存在一条边在凸包上,那么枚举这条边,我们还差三个点,即距离当前边的最远点,以及做这条边 ...

  9. 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)

    题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...

随机推荐

  1. JQ_开发经验

    1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面.而方法可能应 ...

  2. Salesforce随笔: 将Visualforce Page渲染为PDF文件(Render a Visualforce Page as a PDF File)

    参照 : Visualforce Developer Guide 第60页 <Render a Visualforce Page as a PDF File> 你可以用PDF渲染服务生成一 ...

  3. selenium+ python自动化--断言assertpy

    前言: 在对登录验证时,不知道为何原因用unittest的断言不成功,就在网上发现这个assertpy,因此做个笔记 准备: pip install assertypy 例子: from assert ...

  4. LintCode——Chalkboard XOR Game(黑板游戏)

    黑板游戏: We are given non-negative integers nums[i] which are written on a chalkboard. Alice and Bob ta ...

  5. BugPhobia准备篇章:团队Beta阶段准备工作分析

    0x00:序言 To the searching tags, you may well fall in love withhttp://xueba.nlsde.buaa.edu.cn/ 再见,无忧时光 ...

  6. Python爬虫爬中文却显示Unicode,怎样显示中文--问题解答

    首先爬取古诗网站时,显示 原因是因为输出为列表[] 如果写一个循环,输出其中每个元素就为中文了...

  7. Scalable Object Detection using Deep Neural Networks译文

    原文:https://arxiv.org/abs/1312.2249

  8. 四则运算app第一阶段冲刺

    第一阶段冲刺 [开发环境]:eclipse [开发项目]:小学生四则运算APP [开发人员]:郑胜斌 http://www.cnblogs.com/zsb1/ 孔德颖 http://www.cnblo ...

  9. mysql & java & spring transaction isolation level

    mysql /*SESSION LEVEL*/ select @@tx_isolation; /*GLOBAL LEVEL*/ select @@global.tx_isolation; select ...

  10. jmeter 获取执行脚本的路径

    需求:向jmeter.jmx 的路径下 写日志 : import org.apache.jmeter.services.FileServer; import com.bzj.utils.*; Stri ...