POJ 3348 || Cows(求凸包面积
2015-05-05 19:15
405 查看
五十平方米能样一头牛,问能养多少头牛,一个验证模板的题目,拿上一题的代码改一改就过了~
新的andrew~
新的andrew~
#include <algorithm> #include <cstdio> #include <cmath> using namespace std; struct pnode{ int x,y; pnode(int xx=0,int yy=0):x(xx),y(yy){} bool operator < (const pnode &b)const{ return x<b.x|| (x==b.x && y<b.y); } pnode operator - (const pnode &b)const{ return pnode(x-b.x,y-b.y); } int operator ^ (const pnode &b)const{ return x*b.y - y*b.x; } int operator *(const pnode &b)const{ return (x-b.x)*(x-b.y) + (y-b.y)*(y-b.y); } }p[10005],ch[10005]; int top; int cross(const pnode &p0,const pnode &p1,const pnode &p2){ return (p1-p0)^(p2-p0); } int andrew( int n) { sort(p,p+n); top = 0; for( int i = 0 ; i < n;++i ){ while(top > 1 && cross(ch[top-2],ch[top-1],p[i] )<=0 ) top--; ch[top++] = p[i]; } int k = top; for( int i = n-2;i>=0;i-- ){ while( top > k && cross(ch[top-2],ch[top-1],p[i] )<=0 ) top--; ch[top++] = p[i]; } ch[top] = p[0]; return top; } double polygon_area(pnode*p,int n) { double area = 0.0; for( int i = 1;i < n-1 ;++i ) area += cross( p[0], p[i], p[i+1]) ; return area*0.5; } int main() { int n; scanf("%d",&n); for( int i = 0; i < n;++i) scanf("%d %d",&p[i].x,&p[i].y); n = andrew(n); double area = polygon_area(ch,n); int ans = area/50; printf("%d\n",ans); return 0; }
相关文章推荐
- POJ 3348 Cows(求凸包面积)
- poj 3348:Cows(计算几何,求凸包面积)
- poj 3348 Cows(求凸包面积)
- POJ 3348 Cows(凸包面积)
- POJ 3348 Cows (凸包面积)
- POJ 3348 Cows 寻找凸包 凸包面积
- POJ 3348 Cows(凸包+多边形面积)
- POJ 3348 Cows(凸包+多边形面积)
- Cows POJ - 3348 [凸包+面积]
- [poj] 3348 Cows || 求凸包面积
- POJ - 3348 Cows(求凸包的面积)
- POJ 3348 Cows [凸包 面积]
- poj 3348 Cows 求凸包以及凸包的面积
- POJ 3348 Cows 凸包 + 多边形面积公式
- Poj 3348 Cows (凸包面积)
- POJ 3348 Cows(凸包面积)
- POJ-3348 Cows 计算几何 求凸包 求多边形面积
- POJ 3348 Cows(凸包求面积)
- POJ 3348 Cows 凸包+求多边形面积
- POJ 3348 Cows 求凸包面积