题意:

给出n个点,求一个凸包,然后将凸包面积除以50,下取整就是答案。

思路:

直接用安德鲁算法求出凸包 (求出上下凸壳),然后再求多边形面积即可。主要是用来试板子的。

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define cross(p1,p2,p3) ((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y)) //向量(p1,p2)与(p1,p3)叉乘
#define crossOp(p1,p2,p3) sign(cross(p1,p2,p3)) //判断正负,顺时针为负
using namespace std;//实数比较
typedef double db;
const db EPS = 1e-9;inline int sign(db a) {return a < -EPS ? -1 : a > EPS; } //返回-1表示a < 0, 1表示a > 0, 0表示a = 0inline int cmp(db a, db b) {return sign(a-b); } //返回-1表示a < b, 1表示a > b,0表示 a==b//点类
struct P {db x,y;P() {}P(db _x, db _y) : x(_x), y(_y) {}P operator+(P p) { return {x+p.x, y+p.y}; }P operator-(P p) { return {x-p.x, y-p.y}; }P operator*(db d) { return {x*d, y*d}; }P operator/(db d) { return {x/d, y/d}; }db dot(P p) { return x*p.x+y*p.y; }   //点积db det(P p) { return x*p.y-y*p.x; } //叉积P rot(db an) { return {x*cos(an)-y*sin(an),x*sin(an)+y*cos(an)}; } //旋转int quad() const { return sign(y) == 1 || (sign(y) == 0 && sign(x) >= 0); } //判断该点是否在x轴上方或x轴上bool operator<(P p) const {int c = cmp(x, p.x);if (c) return c == -1;    //先判断x大小return cmp(y, p.y) == -1; //再判断y大小}bool operator==(P p) const {return cmp(x, p.x) == 0 && cmp(y, p.y) == 0;}
};db area(vector<P> ps){  //多边形面积db ret = 0; rep(i,0,ps.size()-1) ret += ps[i].det(ps[(i+1)%ps.size()]);return ret/2;
}vector<P> convexHull(vector<P> ps) {int n = ps.size(); if(n <= 1) return ps;sort(ps.begin(),ps.end());vector<P> qs(n*2); int k = 0;for(int i = 0; i < n; qs[k++] = ps[i++])while(k > 1 && crossOp(qs[k-2],qs[k-1],ps[i]) <= 0) --k;for(int i = n-2, t = k; i >= 0; qs[k++] = ps[i--])while(k > t && crossOp(qs[k-2],qs[k-1],ps[i]) <= 0) --k;qs.resize(k-1);return qs;
}int main()
{int n;scanf("%d",&n);vector<P> ld;ld.clear();rep(i,1,n){db x,y;scanf("%lf%lf",&x,&y);P tp(x,y);ld.push_back(tp);}ld = convexHull(ld);db ans = area(ld);int num = floor(ans/50);printf("%d\n",num);return 0;
}

【POJ 3348】Cows【凸包裸题】相关推荐

  1. POJ 3348 Cows 凸包面积

    题目大意:连接个点,求围成的面积并除以50(向下取整) 题目思路:就是求凸包面积:按逆时针方向为凸包上每条边指定方向,对于每条边AB,累加(AXB)/2的值. #include<cstdio&g ...

  2. poj 3348 Cows 求凸包以及凸包的面积

    题目来源: http://poj.org/problem?id=3348 1:任意多边形p[0,n-1]的面积为 for(int i=0 ; i<=n-1 ; i++){ sum+= (sk[i ...

  3. POJ 3348 Cows(二维凸包)

    题目链接:https://cn.vjudge.net/problem/POJ-3348 题意:有一些数,坐标已知,要用这些树作为篱笆的顶点圈一块多边形的地养牛,每头牛占地大小50,问最多能养多少头牛. ...

  4. POJ 3348 Cows(凸包面积)

    有 n 棵树,给出他们的顶点,每头牛的活动范围为 50 平方米,以 n 棵树为顶点围成篱笆,问最多可以容纳多少头牛 求凸包面积模板题 const int N=1e4+5;int i,j,k;int n ...

  5. POJ 3348 Cows

    题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了. ...

  6. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  7. 【OpenJ_Bailian - 1258】【POJ - 1258】Agri-Net (最小生成树裸题)

    题干: Farmer John has been elected mayor of his town! One of his campaign promises was to bring intern ...

  8. 【POJ - 3624 】Charm Bracelet (dp,0-1背包裸题)

    题干: Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to ...

  9. POJ 2352 Starts POJ 2418 Cows

    两道相似的题,都可以转化为求一个点的某个方位(左上,左下,右上,右下)有多少个点,求和 POJ 2352 Starts Astronomers often examine star maps wher ...

  10. 最大流问题模板-java-蓝桥杯-算法训练-网络流裸题

    1. 本题相关资料 题目链接 这是一道求最大流的模板题. 最大流预备知识:dfs,bfs,图论基础(图的存储). 网上已经有很多最大流的解析,我就不再唠叨了,还不了解的同学可参考这个博客:什么是最大流 ...

最新文章

  1. opengl绘制长方体线框_OpenGL 绘制长方体 计算机图形学
  2. Spring运行期间配置文件解析返回
  3. php特性介绍(贼有用)
  4. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  5. 字符串转换成java对象然后通过@RestController返回json对象
  6. .net core 5 IIS Api网站部署需要注意
  7. html td装满图片,HTML:桌子上的Td不满
  8. 网页静态服务器-1-显示固定的页面
  9. Apache 虚拟主机
  10. dispatcherServlet 真正处理请求的源码解析
  11. NFT平台Polkamon将于3月31日在Polkastarter进行IDO
  12. java对话框进度条_java进度条
  13. matlab计算abc三相短路电流_变频电源的安装及单相/三相变频电源电流计算公
  14. 计算机教室标语6个字,教室标语60句
  15. 计算机工程与应用退休被拒,如果您退休了,还能坚持独立做科学研究,那么和大家分享一下您的经验吧...
  16. 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用
  17. XML文件内容格式化与语法错误自动检查
  18. CTFshow--常用姿势
  19. 爬取TIOBE的编程语言排行榜
  20. 自动驾驶中的车道线检测算法汇总

热门文章

  1. 判断浏览器是否为微信内置浏览器
  2. ffmpeg: error while loading shared libraries: libavdevice.so.53
  3. 最全的c#日期函数 winform
  4. js实现二级联动菜单
  5. WampServer图标黄色如何解决
  6. java一个进程可以村多少个线程_一台 Java 服务器可以跑多少个线程?
  7. python 例子 银行_Python3 适合初学者学习的银行账户登录系统实例
  8. 牛客网SQL练习题(Mysql-8)
  9. NYOJ.904 search(二分查找,快速排序,结构体运用)
  10. 创造思维方法训练_数学思维方法训练课程:每日一题11.23