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 ...
随机推荐
- fiddler操作改到本地
urlreplace test5.api.bookapi.cn:8889 localhost:8080
- CDH5离线安装简记
需要的介质如下:CM: cloudera-manager-el6-cm5.4.3_x86_64.tar.gzCDH parcel: CDH-5.4.0-1.cdh5.4.0.p0.27-el6.par ...
- OpenStack之基础知识
一.云计算 云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源.云是网络.互联网的一种比喻说法.过去在图中往往 ...
- 20145307陈俊达第六周JAVA学习总结
20145307陈俊达第六周JAVA学习总结 知识点梳理 第十章节 S1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流.在java中,输入串流代表对象为java. ...
- 游戏服务器的思考之三:谈谈MVC
游戏服务器也是基于MVC架构的吗?是的,所有的应用系统都是基于MVC架构的,这是应用系统的天性.不管是客户端还是后台,都包含模型.流程.界面这3个基本要素:不同类型的应用,3要素的“重量”可能各有偏差 ...
- Ubuntu 16.04下EasyOpenJTAG+OpenOCD的安装和使用【转】
本文转载自:http://www.linuxdiyf.com/linux/24086.html Ubuntu 16.04下EasyOpenJTAG+OpenOCD的安装和使用 发布时间:2016-09 ...
- JasperReports实现报表调出excel
一.利用工具iReport 创建task.jrxml 模板 并生成 task.jasper 文件 二.搭建工程导入以下jar包 commons-beanutils-1.9.2.jar commons- ...
- SQL Server-深入剖析统计信息
转自: http://www.cnblogs.com/zhijianliutang/p/4190669.html 概念理解 关于SQL Server中的统计信息,在联机丛书中是这样解释的 查询优化 ...
- Gym - 100712B Rock-Paper-Scissors
https://vjudge.net/problem/Gym-100712B 题意: 石头剪刀布游戏. 给出一个玩家n局的出的顺序,现在另一个是这样出的,X+Y+Z=n,在前X轮出石头,中间Y轮出布, ...
- Extjs 分页多选的实现
Extjs 版本 6.X 单页面的多选,没有任何问题. 直接使用 Grid的配置项进行绑定即可获取: xtype: 'grid', bind: { selection: '{checkedRecord ...