Graham扫描法:参考博客

一开始以为找到一个顶点向右转弯时,把这个顶点抛出只抛出一个,WA了一直找不到bug,用随机数大法测出了一个数据

在这个例子中,走到第4个点时发现向右拐弯了,于是把第4个点抛出,这时第三个点还是向右拐弯的,所以应该一直抛出直到向左拐弯为止。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;
const double eps = 1e-8;
const int mx = 10005;
int n, top;
struct Point {int x, y;
}pt[mx], stack[mx];double dis(Point a, Point b) {return sqrt(1.0*(a.x-b.x)*(a.x-b.x) + 1.0*(a.y-b.y)*(a.y-b.y));
}int cross(int x1, int y1, int x2, int y2) {return x1*y2 - x2*y1;
}bool cmp(Point a, Point b) {int ans = cross(a.x-pt[1].x, a.y-pt[1].y, b.x-pt[1].x, b.y-pt[1].y);if (ans !=  0) return ans > 0;else return dis(a, pt[1]) < dis(b, pt[1]);
}int solve() {top = 0;if (n < 3) return .0;stack[top++] = pt[1];stack[top++] = pt[2];stack[top++] = pt[3];Point a, b, c;for (int i = 4; i <= n; i++) {a = stack[top-2]; b = stack[top-1];int ans = cross(b.x-a.x, b.y-a.y, pt[i].x-a.x, pt[i].y-a.y);if (ans > 0) stack[top++] = pt[i];else {while (ans <= 0) {top--;a = stack[top-2]; b = stack[top-1];ans = cross(b.x-a.x, b.y-a.y, pt[i].x-a.x, pt[i].y-a.y);}stack[top++] = pt[i];}} int sum = 0;for (int i = 2; i < top; i++) {sum += cross(stack[i-1].x-stack[0].x, stack[i-1].y-stack[0].y, stack[i].x-stack[0].x, stack[i].y-stack[0].y);}return sum / 100;
}int main() {while (scanf("%d",&n) != EOF) {for (int i = 1; i <= n; i++) {scanf("%d%d", &pt[i].x, &pt[i].y);if (pt[i].y < pt[1].y || (pt[i].y == pt[1].y && pt[i].x < pt[1].x)) {swap(pt[i], pt[1]);}}sort(pt+2, pt+1+n, cmp); printf("%d\n",solve());}return 0;
}

poj3348(凸包模板题)相关推荐

  1. hdu4266(三维凸包模板题)

    /*给出三维空间中的n个顶点,求解由这n个顶点构成的凸包表面的多边形个数.增量法求解:首先任选4个点形成的一个四面体,然后每次新加一个点,分两种情况:1> 在凸包内,则可以跳过2> 在凸包 ...

  2. 图论-有向图的连通性模板题(hdu1296)(hdu1827)

    1.强连通分量: 强连通分量可以理解为边数最少的情况下是一个环. 这里写了一个模板题用的是tarjan算法,当然还有其他算法. tarjan算法的关键其实还是对于num数组和low数组的使用 然后可以 ...

  3. P1339 热浪 最短路径模板题

    这么naive的题面一看就是最短路模板题~~~ ok.首先是floyd算法,tts,记得把k放在最外面就行了. 1 #include <cstdio> 2 #include <cst ...

  4. HDU2255 奔小康赚大钱(km模板题)

    Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.         这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...

  5. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. 数单词 (AC自动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...

  7. CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题

    题目分析 来源:acwing 分析: 所求即为强连通分量的个数,然后计算每个强连通分量中点的个数,相加即可. 所谓强连通分量,它是一个子图,其中任意两点可以相互到达,并且再加一个点,就不能满足任意两点 ...

  8. hdu 2191 悼念512汶川大地震遇难同胞 【多重背包】(模板题)

    题目链接:https://vjudge.net/problem/HDU-2191 悼念512汶川大地震遇难同胞--珍惜现在,感恩生活                                   ...

  9. NYOJ 1085 数单词 (AC自动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...

最新文章

  1. Ubuntu 18 系统安装教程
  2. 原码,反码,补码,移码的概念以及各自的用途和优点
  3. 针对不同的Cookie做页面缓存
  4. 力挺2007年国内原创音乐届最权威大赛!
  5. java定义dll文件位置,生成网站时如何设置固定的dll文件名?-Java架构师必看
  6. SQL SERVER2000教程-第二章-创建和管理数据库 第六节 压缩数据库
  7. docker 使用中遇到的问题
  8. 轻松构建Tomcat源码
  9. [HAOI 2010]订货
  10. Percona Toolkit工具箱的安装与使用--完成复杂的mysql操作。
  11. HR_Hash Tables: Ransom Note
  12. java模拟安卓get请求,Java模拟HTTP Get Post请求实现论坛自动回帖功能
  13. android studio for android learning (二十 )android中this、context等关键概念理解全解
  14. “挖矿2.0”:资本方不是只能割区块链的韭菜
  15. 亚马逊买家号注册流程
  16. 转: 测试工具LoadRunner和OpenSTA比较分析
  17. c语言优秀教案,C语言优秀教案.doc
  18. 问题:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?.md
  19. linux解决make依赖关系,makefile 自动处理头文件的依赖关系
  20. 读《逍遥游》感叹中国教育

热门文章

  1. Ubuntu共享WiFi(AP)给Android方法汇总
  2. 汤晓鸥纵论商汤AR:AI驱动发力已超3年,落地多个场景
  3. 2017年普及组初赛题解
  4. Rust语言圣经43 - 深度解读文档注释
  5. 阿里竟然雇佣了一只大猴子...
  6. 云通讯平台php demo,php 腾讯云通讯独立模式
  7. 将字符串中的空格去掉
  8. Acrobat Pro DC 教程:如何压缩PDF文件?
  9. Ubantu安装搜狗输入法
  10. chatgpt赋能python:Python查找手机号码