题目链接:https://cn.vjudge.net/problem/POJ-3348

题意

啊模版题啊

求凸包的面积,除50即可

思路

求凸包的面积,除50即可

提交过程

AC

代码

#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const double eps=1e-10;
struct Point{
double x, y; Point(int x=0, int y=0):x(x), y(y) {}
// no known conversion for argument 1 from 'Point' to 'Point&'
Point operator + (Point p){return Point(x+p.x, y+p.y);}
Point operator - (Point p){return Point(x-p.x, y-p.y);}
Point operator * (double k){return Point(k*x, k*y);}
Point operator / (double k){return Point(x/k, y/k);}
bool operator < (Point p) const{return (x==p.x)?(y<p.y):(x<p.x);} // need eps?
bool operator == (const Point p) const{return fabs(x-p.x)<eps&&fabs(y-p.y)<eps;}
double norm(void){return x*x+y*y;}
double abs(void){return sqrt(norm());}
double dot(Point p){return x*p.x+y*p.y;} // cos
double cross(Point p){return x*p.y-y*p.x;} // sin
};
struct Segment{Point p1, p2;};
struct Circle{Point o; double rad;};
typedef Point Vector;
typedef vector<Point> Polygon;
typedef Segment Line; int ccw(Point p0, Point p1, Point p2){
Vector v1=p1-p0, v2=p2-p0;
if (v1.cross(v2)>eps) return 1; // anti-clockwise
if (v1.cross(v2)<-eps) return -1; // clockwise
if (v1.dot(v2)<0) return 2;
if (v1.norm()<v2.norm()) return -2;
return 0;
} Point project(Segment s, Point p){
Vector base=s.p2-s.p1;
double k=(p-s.p1).cross(base)/base.norm();
return s.p1+base*k;
} Point reflect(Segment s, Point &p){
return p+(project(s, p)-p)*2;
} double lineDist(Line l, Point p){
return abs((l.p2-l.p1).cross(p-l.p1)/(l.p2-l.p1).abs());
} double SegDist(Segment s, Point p){
if ((s.p2-s.p1).dot(p-s.p1)<0) return Point(p-s.p1).abs();
if ((s.p1-s.p2).dot(p-s.p2)<0) return Point(p-s.p2).abs();
return abs((s.p2-s.p1).cross(p-s.p1)/(s.p2-s.p1).abs());
} bool intersect(Point p1, Point p2, Point p3, Point p4){
return ccw(p1, p2, p3)*ccw(p1, p2, p4)<=0 &&
ccw(p3, p4, p1)*ccw(p3, p4, p2)<=0;
} Point getCrossPoint(Segment s1, Segment s2){
Vector base=s2.p2-s2.p1;
double d1=abs(base.cross(s1.p1-s2.p1));
double d2=abs(base.cross(s1.p2-s2.p1));
double t=d1/(d1+d2);
return s1.p1+(s1.p2-s1.p1)*t;
} double area(Polygon poly){
double res=0; long long size=poly.size();
for (int i=0; i<poly.size(); i++)
res+=poly[i].cross(poly[(i+1)%size]);
return abs(res/2);
} int contain(Polygon poly, Point p){
int n=poly.size();
bool flg=false;
for (int i=0; i<n; i++){
Point a=poly[i]-p, b=poly[(i+1)%n]-p;
if (ccw(poly[i], poly[(i+1)%n], p)==0) return 1; // 1 means on the polygon.
if (a.y>b.y) swap(a, b);
if (a.y<0 && b.y>0 && a.cross(b)>0) flg=!flg;
}return flg?2:0; // 2 fo inner, 0 for outer.
} Polygon convexHull(Polygon poly){
if (poly.size()<3) return poly;
Polygon upper, lower;
sort(poly.begin(), poly.end());
upper.push_back(poly[0]); upper.push_back(poly[1]);
lower.push_back(poly[poly.size()-1]); lower.push_back(poly[poly.size()-2]);
for (int i=2; i<poly.size(); i++){
for (int n=upper.size()-1; n>=1 && ccw(upper[n-1], upper[n], poly[i])!=-1; n--)
upper.pop_back();
upper.push_back(poly[i]);
}
for (int i=poly.size()-3; i>=0; i--){
for (int n=lower.size()-1; n>=1 && ccw(lower[n-1], lower[n], poly[i])!=-1; n--)
lower.pop_back();
lower.push_back(poly[i]);
}
for (int i=1; i<lower.size(); i++)
upper.push_back(lower[i]);
return upper;
} int main(void){
int n;
double x, y; while (scanf("%d", &n)==1 && n){
Polygon poly, hull;
for (int i=0; i<n; i++){
scanf("%lf%lf", &x, &y);
poly.push_back(Point(x, y));
}
printf("%d\n", (long long)area(convexHull(poly))/50);
} return 0;
}
Time Memory Length Lang Submitted
608kB 3526 G++ 2018-08-01 17:22:02

POJ-3348 Cows 计算几何 求凸包 求多边形面积的更多相关文章

  1. ●POJ 3348 Cows

    题链: http://poj.org/problem?id=3348 题解: 计算几何,凸包,多边形面积 好吧,就是个裸题,没什么可讲的. 代码: #include<cmath> #inc ...

  2. UVa 10652(旋转、凸包、多边形面积)

    要点 凸包显然 长方形旋转较好的处理方式就是用中点的Vector加上旋转的Vector,然后每个点都扔到凸包里 多边形面积板子求凸包面积即可 #include <cstdio> #incl ...

  3. poj 3348:Cows(计算几何,求凸包面积)

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6199   Accepted: 2822 Description ...

  4. POJ 3348 Cows 凸包 求面积

    LINK 题意:给出点集,求凸包的面积 思路:主要是求面积的考察,固定一个点顺序枚举两个点叉积求三角形面积和除2即可 /** @Date : 2017-07-19 16:07:11 * @FileNa ...

  5. poj 3348 Cows 求凸包面积

    题目链接 大意: 求凸包的面积. #include <iostream> #include <vector> #include <cstdio> #include ...

  6. POJ 3348 Cows(凸包+多边形面积)

    Description Your friend to the south is interested in building fences and turning plowshares into sw ...

  7. 简单几何(凸包+多边形面积) POJ 3348 Cows

    题目传送门 题意:求凸包 + (int)求面积 / 50 /************************************************ * Author :Running_Tim ...

  8. POJ 3348 - Cows 凸包面积

    求凸包面积.求结果后不用加绝对值,这是BBS()排序决定的. //Ps 熟练了template <class T>之后用起来真心方便= = //POJ 3348 //凸包面积 //1A 2 ...

  9. POJ 3348 Cows (凸包模板+凸包面积)

    Description Your friend to the south is interested in building fences and turning plowshares into sw ...

随机推荐

  1. 浏览器渲染HTML页面步骤

    渲染步骤:浏览器渲染页面时,表示网站资源已经请求成功(要了解查看:浏览器向服务器请求资源过程) 解析HTML以构建dom树--->构建render树--->布局render树---> ...

  2. 设置Django关闭Debug后的静态文件路由

    Django在Debug模式关闭掉后请求静态文件时,返回404相应码,后台的请求url是"GET /static/css/404.css HTTP/1.1" 404 1217,找不 ...

  3. Git diff 代码比较的高级技巧

    Git diff 代码比较的高级技巧 作者:offbye 出处:http://blog.csdn.net/offbye/article/details/6592563 Git是使用branch来管理不 ...

  4. [转]收集android上开源的酷炫的交互动画和视觉效果

    原文链接:http://www.open-open.com/lib/view/open1411443332703.html 描述:收集android上开源的酷炫的交互动画和视觉效果. 1.交互篇 2. ...

  5. 赵雅智_使用SQLiteDatabase操作SQLite数据库及事务

    知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ...

  6. android自己定义Application全局变量不能类型转换的问题

    今天弄了个全局变量AppContext ,但一直出现例如以下错误,原来继承 Application的得在清单文件声明. java.lang.RuntimeException: Unable to st ...

  7. iOS开发自己定义键盘回车键Return Key

    在iOS开发中.用户在进行文本输入的时候,往往会用到虚拟键盘上的回车键,也就是Return Key.回车键有时候能够是"完毕"(表示输入结束).能够是"下一项" ...

  8. Maven简单介绍(Maven是什么)

    简单介绍 Maven,在意第绪语中意为对知识的积累.Maven最初用来在Jakarta Turbine项目中简化该项目的构建过程. Jakarta Trubine项目有多个project.每一个pro ...

  9. Picking up Jewels

    Picking up Jewels There is a maze that has one entrance and one exit.  Jewels are placed in passages ...

  10. 设计模式入门之代理模式Proxy

    //代理模式定义:为其它对象提供一种代理以控制对这个对象的訪问 //实例:鉴于书中给出的样例不太好.并且有些疑问,所以直接用保护代理作为实例 //要求,一旦订单被创建,仅仅有订单的创建人才干够改动订单 ...