poj 3348 Cows 凸包 求多边形面积 计算几何 难度:0 Source:CCC207
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 7038 | Accepted: 3242 |
Description
Your friend to the south is interested in building fences and turning plowshares into swords. In order to help with his overseas adventure, they are forced to save money on buying fence posts by using trees as fence posts wherever possible. Given the locations of some trees, you are to help farmers try to create the largest pasture that is possible. Not all the trees will need to be used.
However, because you will oversee the construction of the pasture yourself, all the farmers want to know is how many cows they can put in the pasture. It is well known that a cow needs at least 50 square metres of pasture to survive.
Input
The first line of input contains a single integer, n (1 ≤ n ≤ 10000), containing the number of trees that grow on the available land. The next n lines contain the integer coordinates of each tree given as two integers x and yseparated by one space (where -1000 ≤ x, y ≤ 1000). The integer coordinates correlate exactly to distance in metres (e.g., the distance between coordinate (10; 11) and (11; 11) is one metre).
Output
You are to output a single integer value, the number of cows that can survive on the largest field you can construct using the available trees.
Sample Input
4
0 0
0 101
75 0
75 101
Sample Output
151
题意:题目的意思是给你n个点,让你用其中一些点围出最大面积,然后输出面积/50的下取整
思路:如果围出的多边形不是凸多边形,那么一定有凸多边形更优,所以求个凸包,计算凸包面积,/50取整
凸包算法:确定左下角的点,加入栈中,此后对于排过序的点,如果它到目前栈中最上面的两个点角度为钝角平角,那么它要比最上面那个点更优,弹出那个点,不断重复此操作,就能得到上凸包(因为点排过序,按照优先左的顺序,下凸包可能不完全),从第n-2点开始重复一遍此操作,得到下凸包
计算面积:左下角点一定是h[0],从左下角点连接所有到其他点的对角线,把原凸包分成很多个三角形,分别计算面积即可
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct pnt{
int x,y;
pnt(){x=y=0;}
pnt(int tx,int ty){x=tx;y=ty;}
pnt operator -(pnt p2){return pnt(x-p2.x,y-p2.y);}
pnt operator +(pnt p2){return pnt(x+p2.x,y+p2.y);}
bool operator <(pnt p2)const {if(x!=p2.x)return x<p2.x;return y<p2.y;}
bool operator >(pnt p2)const {if(x!=p2.x)return x>p2.x;return y>p2.y;}
bool operator ==(pnt p2)const {return x==p2.x&&y==p2.y;}
int dot(pnt p2){return x*p2.x+y*p2.y;}//点积
int det(pnt p2){return x*p2.y-y*p2.x;}//叉积
};
const int maxn=1e4+2;
pnt p[maxn],h[maxn];
int n,m;
void convexHull(){
sort(p,p+n);
m=0;
for(int i=0;i<n;i++){//计算上凸包
while(m>1&&(h[m-1]-h[m-2]).det(p[i]-h[m-2])<=0){m--;}
h[m++]=p[i];
}
int tm=m;
for(int i=n-2;i>=0;i--){//计算下凸包
while(m>tm&&(h[m-1]-h[m-2]).det(p[i]-h[m-2])<=0){m--;}
h[m++]=p[i];
}
if(n>1)m--;
}
double calArea(){
double ans=0;
for(int i=0;i<m;i++){
ans+=(double)((h[i]-h[0]).det(h[(i+1)%m]-h[0]))/2;//使用叉积计算面积
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y);
convexHull();
int ans=(int)(calArea()/50.0);
printf("%d\n",ans);
return 0;
}
poj 3348 Cows 凸包 求多边形面积 计算几何 难度:0 Source:CCC207的更多相关文章
- POJ 3348 Cows 凸包 求面积
LINK 题意:给出点集,求凸包的面积 思路:主要是求面积的考察,固定一个点顺序枚举两个点叉积求三角形面积和除2即可 /** @Date : 2017-07-19 16:07:11 * @FileNa ...
- POJ 3348 - Cows 凸包面积
求凸包面积.求结果后不用加绝对值,这是BBS()排序决定的. //Ps 熟练了template <class T>之后用起来真心方便= = //POJ 3348 //凸包面积 //1A 2 ...
- POJ-3348 Cows 计算几何 求凸包 求多边形面积
题目链接:https://cn.vjudge.net/problem/POJ-3348 题意 啊模版题啊 求凸包的面积,除50即可 思路 求凸包的面积,除50即可 提交过程 AC 代码 #includ ...
- POJ 3348 Cows (凸包模板+凸包面积)
Description Your friend to the south is interested in building fences and turning plowshares into sw ...
- POJ 3348 Cows [凸包 面积]
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9022 Accepted: 3992 Description ...
- POJ 3348 Cows | 凸包模板题
题目: 给几个点,用绳子圈出最大的面积养牛,输出最大面积/50 题解: Graham凸包算法的模板题 下面给出做法 1.选出x坐标最小(相同情况y最小)的点作为极点(显然他一定在凸包上) 2.其他点进 ...
- POJ 3348 Cows | 凸包——童年的回忆(误)
想当年--还是邱神给我讲的凸包来着-- #include <cstdio> #include <cstring> #include <cmath> #include ...
- poj 3348 Cow 凸包面积
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8122 Accepted: 3674 Description ...
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
Area Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 用random模块实现验证码
#! /usr/bin/env python3 import random checkcode = "" ## 全部为数字的验证码 # for i in range(4): # c ...
- zookeeper 监听事件 PathChildrenCacheListener
zookeeper 监听事件 PathChildrenCacheListener PathChildrenCacheListener一次父节点注册,监听每次子节点操作,不监听自身和查询. 1.测试类: ...
- Table的一些设置(自适应以及溢出)
table的两个属性 单行溢出点点显示 表格的宽度设置 双栏自适应连续连续英文符换行 1.table重置的两个属性: ①border-collapse: collapse; /* 为表格设置 ...
- 20145301实验五 Java网络编程及安全
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 ...
- java开发中的诡异事件
1.Excel中的诡异'\r' 2.springMVC中参数莫名的不匹配 今天在使用springmvc测试一个controller方法一直访问失败,400错误,百思不得其解 先是问同事,然后一起讨论了 ...
- Linux系统巡检项目
系统检测 1.检查系统类型 2.检查发行版本 3.检查内核版本 4.检查主机名称 5.检查是否启用SElinux 6.检测默认的语言/编码 7.检测uptime 8.检测最后启动时间等 CPU检查 1 ...
- Ad Exchange基本接口和功能
这里描述下一个exchange通常应该提供的接口和应该满足的功能. 接口 实时竞价接口 实时竞价接口也是最核心的接口,对接的dsp需要向exchange提供竞价地址.每次有广告请求时,exchange ...
- mybatis的一对多
1.配置文件 db.properties db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/demo?useUnic ...
- STL list用法总结
2017-08-20 15:17:30 writer:pprp list是一种线性复杂度的容器,很快 /* name : usage of List writer : pprp declare : n ...
- 秒懂算法3——插入排序(C#实现)
算法思路: 将n个元素分成[已排序]和[未排序]两部分.每次将[未排序]中的一个元素取出,插入到已排序中的相应位置.直至所有元素排序完毕. [已排序] [未排序] { { a[0] } ...