[POJ3348]Cows(凸包)
来源:互联网 发布:淘宝上电动涡轮增压器 编辑:程序博客网 时间:2024/06/06 05:00
题目描述
传送门
题意:给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛?
题解
求凸包的面积,/50就可以了
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 10005const double eps=1e-9;int dcmp(double x){ if (x<=eps&&x>=-eps) return 0; return (x>0)?1:-1;}struct Vector{ double x,y; Vector(double X=0,double Y=0) { x=X,y=Y; } bool operator < (const Vector &a) const { return x<a.x||(x==a.x&&y<a.y); }};typedef Vector Point;Vector operator - (Vector A,Vector B) {return Vector(A.x-B.x,A.y-B.y);}int n,top;double x,y,ans;Point p[N],stack[N];double Cross(Vector A,Vector B){ return A.x*B.y-A.y*B.x;}void Graham(){ sort(p+1,p+n+1); for (int i=1;i<=n;++i) { while (top>1&&dcmp(Cross(stack[top]-stack[top-1],p[i]-stack[top-1]))<=0) --top; stack[++top]=p[i]; } int k=top; for (int i=n-1;i>=1;--i) { while (top>k&&dcmp(Cross(stack[top]-stack[top-1],p[i]-stack[top-1]))<=0) --top; stack[++top]=p[i]; } if (n>1) --top;}double Area(){ double area=0; for (int i=2;i<top;++i) area+=Cross(stack[i]-stack[1],stack[i+1]-stack[1]); return area/2.0;}int main(){ scanf("%d",&n); for (int i=1;i<=n;++i) { scanf("%lf%lf",&x,&y); p[i]=Point(x,y); } Graham(); ans=Area(); printf("%d\n",(int)ans/50);}
0 0
- [POJ3348]Cows(凸包)
- POJ3348--cows--凸包
- poj3348 Cows【凸包面积】
- poj3348 Cows【凸包模板】
- poj3348 Cows 凸包+多边形面积 水题
- Cows(poj3348凸包的面积)
- POJ3348-Cows
- Poj3348 Cows
- 【poj3348】 Cows
- POJ3348-凸包
- POJ3348 凸包面积计算
- POJ3348——Cows
- poj3348-Cows 求凸包及其面积
- Cows(凸包面积)
- poj3348 Cows (Graham Scan算法学习)
- POJ 3348 Cows(凸包面积)
- poj 3348 Cows (凸包面积)
- POJ 3348 Cows (凸包面积)
- Python爬虫爬取博客访问量
- hibernate session的get和load方法
- Caffe源码解析6:Neuron_Layer
- Android实验一
- 第三十九讲项目5——阿姆斯特朗数
- [POJ3348]Cows(凸包)
- [BZOJ4105][Thu Summer Camp 2015]平方运算
- JavaAPI详解系列(2):String类(2)
- jade入门与初步使用
- 初步使用Cisco Packet Tracer 6.0
- oracle数据库将多个列的查询结果集合并到一行中
- linux定时执行任务
- Lable的富文本
- MySQL数据库的库表数据操作(复习1)