POJ2079:Triangle——题解
http://poj.org/problem?id=2079
题目大意:求最大面积的三角形。
——————————————————
可以知道,最大面积的三角形的顶点一定是最大凸包的顶点。
接下来就是O(n*n)的常数优化题了(利用单峰性)。
(但其实不是n*n的,因为我们求的是纯凸包,所以n会小一些)
- #include<cstdio>
- #include<queue>
- #include<cctype>
- #include<cstring>
- #include<stack>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- typedef double dl;
- const dl eps=1e-;
- const int N=;
- struct point{
- dl x;
- dl y;
- }p[N],q[N];
- int n,per[N],l;
- inline point getmag(point a,point b){
- point s;
- s.x=b.x-a.x;s.y=b.y-a.y;
- return s;
- }
- inline dl multiX(point a,point b){
- return a.x*b.y-b.x*a.y;
- }
- inline dl dis(point a,point b){
- return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
- }
- inline bool cmp(int u,int v){
- dl det=multiX(getmag(p[],p[u]),getmag(p[],p[v]));
- if(fabs(det)>eps)return det>eps;
- return dis(p[],p[u])-dis(p[],p[v])<-eps;
- }
- void graham(){
- int id=;
- for(int i=;i<=n;i++){
- if(p[i].x-p[id].x<-eps||(fabs(p[i].x-p[id].x)<eps&&p[i].y-p[id].y<-eps))id=i;
- }
- if(id!=)swap(p[],p[id]);
- for(int i=;i<=n;i++)per[i]=i;
- sort(per+,per+n+,cmp);
- l=;
- q[++l]=p[];
- for(int i=;i<=n;i++){
- int j=per[i];
- while(l>=&&multiX(getmag(q[l-],p[j]),getmag(q[l-],q[l]))>-eps){
- l--;
- }
- q[++l]=p[j];
- }
- return;
- }
- inline dl area(){
- if(l<=)return ;
- dl ans=;
- for(int i=;i<=l;i++){
- int j=i%l+;
- int k=j%l+;
- while(){
- dl s1=multiX(getmag(q[i],q[j]),getmag(q[i],q[k]));
- dl s2=multiX(getmag(q[i],q[j]),getmag(q[i],q[k%l+]));
- if(fabs(s1)-fabs(s2)>-eps){
- break;
- }
- k=k%l+;
- }
- while(i!=j&&j!=k&&i!=k){
- dl s=multiX(getmag(q[i],q[j]),getmag(q[i],q[k]));
- ans=max(ans,fabs(s)/2.0);
- while(){
- dl s1=multiX(getmag(q[i],q[j]),getmag(q[i],q[k]));
- dl s2=multiX(getmag(q[i],q[j]),getmag(q[i],q[k%l+]));
- if(fabs(s1)-fabs(s2)>-eps){
- break;
- }
- k=k%l+;
- }
- j=j%l+;
- }
- }
- return ans;
- }
- int main(){
- while(scanf("%d",&n)!=EOF&&n!=-){
- for(int i=;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
- graham();
- printf("%.2f\n",area());
- }
- return ;
- }
POJ2079:Triangle——题解的更多相关文章
- ZOJ 4081 Little Sub and Pascal's Triangle 题解
ZOJ 4081 Little Sub and Pascal's Triangle 题解 题意 求杨辉三角第n行(从1开始计数)有几个奇数. 考察的其实是杨辉--帕斯卡三角的性质,或者说Gould's ...
- codechef Sums in a Triangle题解
Let's consider a triangle of numbers in which a number appears in the first line, two numbers appear ...
- POJ2079 Triangle
题面 题解 我什么时候会过这种东西???(逃 旋转卡壳板子题(听说这个算法有十六种读音??? 我是真的忘了这道题目怎么做了,挂个\(blog\),等我学会了再写题解 我的代码里居然有注释???好像还是 ...
- CF336A Vasily the Bear and Triangle 题解
Content 一个矩形的顶点为 \((0,0)\),其对顶点为 \((x,y)\),现过 \((x,y)\) 作直线,分别交 \(x\) 轴和 \(y\) 轴于 \(A,B\) 两点,使得 \(\t ...
- Codechef Not a Triangle题解
找出一个数组中的三个数,三个数不能组成三角形. 三个数不能组成三角形的条件是:a + b < c 两边和小于第三边. 这个问题属于三个数的组合问题了.暴力法可解,可是时间效率就是O(n*n*n) ...
- CF1064A Make a triangle! 题解
Content 有三条长度分别为 \(a,b,c\) 的线段.你可以在一个单位时间内将一条线段的长度增加 \(1\),试求出能使这三条线段组成一个三角形的最短时间. 数据范围:\(1\leqslant ...
- POJ 1927 Area in Triangle 题解
link Description 给出三角形三边长,给出绳长,问绳在三角形内能围成的最大面积.保证绳长 \(\le\) 三角形周长. Solution 首先我们得知道,三角形的内切圆半径就是三角形面积 ...
- 120. Triangle
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- Triangle leetcode java
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
随机推荐
- C# 调用webserver 出现:未能从程序集“jgd3jufm, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型
一般都是 用的动态调用webserver,然后这次用的是固定的 首先 最后 实例化改接口,然后直接传值调用
- NPOI List数据源 导出excel
List数据源生成HSSFWorkbook通用方法: public class WorkBook { public static HSSFWorkbook BuildSwitchData<T&g ...
- 180611-Spring之RedisTemplate配置与使用
logo 文章链接:https://liuyueyi.github.io/hexblog/2018/06/11/180611-Spring之RedisTemplate配置与使用/ Spring ...
- Objective-C Block数据类型 @protocol关键字
Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合 ...
- Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat
第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...
- Python常用函数--return 语句
在Python教程中return 语句是函数中常用的一个语句.return 语句用于从函数中返回,也就是中断函数.我们也可以选择在中断函数时从函数中返回一个值.案例(保存为 function_retu ...
- 牛客网暑期ACM多校训练营(第五场):F - take
链接:牛客网暑期ACM多校训练营(第五场):F - take 题意: Kanade有n个盒子,第i个盒子有p [i]概率有一个d [i]大小的钻石. 起初,Kanade有一颗0号钻石.她将从第1到第n ...
- Bootstrap框架(图标)
Glyphicons 字体图标 所有可用的图标 包括250多个来自 Glyphicon Halflings 的字体图标.Glyphicons Halflings 一般是收费的,但是他们的作者允许 Bo ...
- LeetCode - 268. Missing Number - stable_sort应用实例 - ( C++ ) - 解题报告
1.题目大意 Given an array nums, write a function to move all 0's to the end of it while maintaining the ...
- Solium代码测试框架
Solium, 在solid中,Linter用于标识和修复样式&安全问题 //调用测试 solium -d contracts --fix 源代码名称:Solium 源代码网址:http:// ...