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 ...
随机推荐
- android线程学习心得
有一篇关于android线程讲的非常好,大家可以参考下,其中有一句话讲的非常好,就拿来做开篇之句: 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主 ...
- sparkSQL——DataFrame&Datasets
对于新司机,可能看到sc与spark不知道是什么,看图知意 ********************************************************************** ...
- mysql外键约束无法删除数据的情况解决办法
先删除子表的数据,然后再删除主表的数据.
- Mysql 数据类型及选择原则
MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 数据库类型的选择对数据库的性能影响很大 1 . 数据类型会影响存储空间的开销 2 . 数据类型会影响 ...
- oracle 分区表详解
一.分区表的概述: Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任 ...
- JAVA面试题整理(4)-Netty
1.BIO.NIO和AIO 2.Netty 的各大组件 3.Netty的线程模型 4.TCP 粘包/拆包的原因及解决方法 5.了解哪几种序列化协议?包括使用场景和如何去选择 6.Netty的零拷贝实现 ...
- shall的过去式和should怎么区分
shall的过去式是should,但是怎么和情态动词的should区分啊,答得好我会提高悬赏!!! shall 将来时,用于第一人称:I shall be back in a minute.用来表示征 ...
- ifconfig设置ip时出现提示 ifconfig: SIOCSIFFLAGS: Address not available
一.笔者使用ifconfig观察网卡情况如下: root@jello:/# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:0 ...
- angularjs 整合bootstrap 时间控件
一.引入js <link href="${basePath}/static/plugin/bootstrap/css/bootstrap-datetimepicker.min.css& ...
- jenkins+gradle打包android遇到的坑
1.gradle与gradlew的选择 配置project,我们选择gradle进行打包.会看到如下图配置项.然而很多网上教程中给出的选择是第一项.只能这么说,如果你是新建一个androidDemo, ...