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 ...
随机推荐
- 2017浙江省赛 C - What Kind of Friends Are You? ZOJ - 3960
地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3960 题目: Japari Park is a large zoo ...
- Nginx配置性能优化(转)
原文地址:http://blog.csdn.net/xifeijian/article/details/20956605 高层的配置 nginx.conf文件中,Nginx中有少数的几个高级配置在模块 ...
- iOS 自动订阅开发
一.代码逻辑 关于iOS 订阅.自动订阅 本身功能开发很简单.跟正常的购买没什么大的差异.唯一需要特殊处理(自动订阅)的是, 在APP启动时候要增加侦听: [[SKPaymentQueue defau ...
- python3_pickle模块详解
python3 pickle持久化的储存数据. python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python模块大 ...
- 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法
在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...
- 照着官网来安装openstack pike之neutron安装
neutron组件安装分为控制节点和计算节点,还是先从控制节点安装 1.前提条件,数据库为nova创建库和账户密码来连接数据库 # mysql -u root -p MariaDB [(none)]& ...
- 20145324 Java实验四
在IDEA上操作 由于不会创建安卓模拟器失败 选择老师给的插件 成功 实验总结 开始开发安卓,感觉更难了,这次实验完全是看运气拼电脑的实验! 步骤 耗时 百分比 需求分析 10m 17% 设计 20m ...
- Sqoop-问题
1.权限问题 // :: INFO mapreduce.Job: Job job_1555064328415_0328 failed with state FAILED due to: Job set ...
- php isset
isset函数是检测变量是否设置. 格式:bool isset ( mixed var [, mixed var [, ...]] ) 返回值: 若变量不存在则返回 FALSE 若变量存在且其值为NU ...
- Learning Perl 第九章习题第二题
把输入文件中的所有Fred换成Larry, 不区分大小写. 知识点 1. 文本文件读写 2. 简单的正则替换 3. unless 的用法 4. $_ 的用法