hdoj 2202 最大三角形
题目大意:给定n(3<=n<=50000)个点,求其中任意三个点组成的三角形面积最大,输出该面积.
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2202
解题思路:用graham求离散点凸包,随后暴力枚举求最大三角形面积
/*
author:panzg
time:2013/10/22
graham求凸包
*/
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct point
{
double x,y;
};
point p[],s[];
bool mult(point sp,point ep,point op)
{
return (sp.x-op.x)*(ep.y-op.y)>=(ep.x-op.x)*(sp.y-op.y);
}
bool operator < (const point &l, const point &r)
{
return l.y < r.y || (l.y == r.y && l.x < r.x);
}
int graham(point pnt[],int n,point res[])
{
int i,len,top=;
sort(pnt,pnt+n);
if(n==) return ;
res[]=pnt[];
if(n==) return ;
res[]=pnt[];
if(n==) return ;
res[]=pnt[];
for(i=; i<n; i++)
{
while(top&&mult(pnt[i],res[top],res[top-]))
top--;
res[++top]=pnt[i];
}
len=top;
res[++top]=pnt[n-];
for(i=n-; i>=; i--)
{
while(top!=len&&mult(pnt[i],res[top],res[top-])) top--;
res[++top]=pnt[i];
}
return top;
}
double area(point i,point j,point k)
{
double s=fabs(double(i.x*j.y+j.x*k.y+k.x*i.y-
i.y*j.x-j.y*k.x-k.y*i.x)/);
return s;
}
double maxx(double x,double y)
{
return x>y?x:y;
}
int main()
{
int n,m,i,j,k; double ans,t,t1;
freopen("input.txt","r",stdin);
while(cin>>n&&n!=)
{
m=;
memset(p,,sizeof(p));
memset(s,,sizeof(s));
for(i=; i<n; i++)
cin>>p[i].x>>p[i].y;
m=graham(p,n,s); //求凸包 //暴力枚举所有的三角形
for(ans=,i=; i<=m; i++)
for(j=i+; j<=m; j++)
for(k=j+; k<=m; k++)
ans=maxx(ans,area(s[i],s[j],s[k]));
printf("%.2f\n",ans);
}
return ;
}
hdoj 2202 最大三角形的更多相关文章
- hdu 2202 最大三角形 (凸包)
最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdoj 2091 空心三角形
空心三角形 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 2202 最大三角形(凸包)
Problem Description 老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大.Eddy ...
- hdu 2202 最大三角形_凸包模板
题意:略 思路:直接套用凸包模板 #include <iostream> #include <cstdio> #include <cmath> #include & ...
- HDU 2202 最大三角形
题解:先算出凸包,然后枚举凸包上的点计算即可 #include <cstdio> #include <cmath> #include <cstdlib> #incl ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
- hdoj 2039 三角形
Problem Description 给定三条边,请你判断一下能不能组成一个三角形. Input 输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C.其中A,B,C & ...
- HDOJ(HDU) 2091 空心三角形
Problem Description 把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出 ...
- HDOJ 1249 三角形『平面分隔』
很水拉 为了记规律- - 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1249 分隔平面公式 下面是我自己查找的公式,没有推到过程,但可以给一些链 ...
随机推荐
- POJ 2407 Relatives
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13920 Accepted: 6965 Description Give ...
- [GeekBand]C++高级编程技术(2)
本篇笔记主要分为两个主要部分,第一部分关于对象模型,第二部分是关于new和delete的更加深入的学习. 一.对象模型 关于vptr(虚指针)和vtbl(虚函数表) 只要用到了虚函数,对象中就会多一个 ...
- Essential C++ 学习笔记02--Array/Vector 与指针
Essential C++ 1.5-1.6节,3.1节笔记 Array/Vector/指针,难度偏大, 但若学习初期不熟悉基本用法,则难以写出有效代码. 1. 基本概念 Array 是一段连续内存,数 ...
- xmlspy注册后打开报错的解决办法
XMLSpy 2011中文版破解补丁使用方法 1.如果你下载的版本是r2sp1的话(r2不用此步骤),先用补丁主程序(altova.xmlspy.v2011r2sp1b-patch.exe).2.XM ...
- iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合
1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...
- mysql快速上手2
上一篇文章讲的是mysql的基本操作,这一篇会有一点难以理解,本节主要内容mysql视图,存储过程,函数,事务,触发器,以及动态执行sql 视图view 视图是一个虚拟表,其内容由查询定义.同真实的表 ...
- JAVA多线程学习1
一.进程与线程 线程是指进程内的一个执行单元(可理解为程序内的一条执行路径),也是进程内的可调度实体. 线程与进程的区别: 1.线程是进程的一个执行单元,一个进程可以拥有多个线程,线程之间共享进程的地 ...
- CDH JPS 出现没有名字的进程
jps 时出现没有名字的进程 或者process information unavailable 把服务关掉,执行一下 rm -rf /tmp/hsperfdata_* 再重启就好了.
- (转)Windows驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
- hdu 5690 2016"百度之星" - 初赛(Astar Round2A) All X 快速二次幂 || 寻找周期
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5690 题意:m个数字全为x mod k ?= c;其中m <= 1010,0 < c,k ...