首页 > 其他分享 >凸包练习

凸包练习

时间:2023-08-11 09:34:28浏览次数:61  
标签:atcoder 题解 练习 Day2 凸包 2012

凸包练习

本文主要是对遇到的进阶凸包问题进行总结

目录

1. JOISC 2012 Day2 T2「星座

直接看,完全没思路,看题解,三角剖分什么鬼,于是建议去CF1045E先看看类似题解

干脆单独写一篇博客吧

2. atcoder Holes

这个东西,我觉得有必要写以下两点

  1. 最好最好不要手动特判输出,容易错(0.5,0.5)情况

  2. 使用反函数得到角度后,例如求得$ acos$ 后不要$/180$这样,要$/acos(-1)$

  3. 精度问题:不管是double还是long double,都只能管到16位

3. 动态凸包

其实就是多维护了一个set罢了。

4.合金

这道题就是要求在凸包上选择几个点,这几个点构成的几何图形正好能囊括另外m个点,求最少的点数。

对于凸包上任意一个有向边而言,我们规定,这条边可以被选择当且仅当这m个点在这条有向边的左侧。

然后$ floyd$ 最短路上,将合法的边长度定为1,找一个最小环即可。

注意点是:

  1. 这个环应该是个有向环,所以不能仅仅凭靠一个有向边连上一个无向边。
  2. 当这个点在某一个有向线段上(叉积为0),注意判断$dis$的大小,即这个点虽然在直线上但不在线段上。

标签:atcoder,题解,练习,Day2,凸包,2012
From: https://www.cnblogs.com/linghusama/p/17622195.html

相关文章

  • 2023.8.10 练习
    ARC065F非常抽象。ARC066D我们知道\(a+b=a\spacexor\spaceb+2(a\wedgeb)\)考虑到若\(u=a\spacexor\spaceb,v=a+b\)那么\(v\geu\).我们只要统计所有\(v\),\((v,u)\)的个数求和即可。注意到若\((u,v)\)合法,那么\((2u,2v)\)、\((2u,2v+2)\)、\((2u+1,2v+1)\)......
  • 递归算法练习C++
    1、逆波兰表达式(1)题目描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示法为+23。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2+3)*4的逆波兰表示法为*+234。本题求解逆波兰表达式的值,其中运算符包括......
  • 2023.8.9 练习
    ARC063E首先树是二分图。二分图同侧的点奇偶性必须相同,异侧必须不同。排掉不合法之后。然后我们处理出若只考虑子树,一个点的取值范围。若一个点没法取值,也排掉。然后从根开始构造即可。ARC062F牛题。首先求点双。若不在点双里面的边,贡献是\(K\).考虑一个点双,若这个点双......
  • 我的第十三次C语言练习
    //intmain(void)//{// charname1[40];// charname2[40];// printf("Mynameis");// scanf("%s%s",name1,name2);//MynameisAngelaPlains// printf("Hello%s%s",name1,name2);// HelloAngelaPlains// return0;//}今天先是......
  • 编程练习总结
    基础语法复习c数据类型unsigned取正数,否则是正负参半,0算在正数侧int范围大概到20wsizeof(xxx)获取所占字节数♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥......
  • 异常处理以及for循环底层练习
    异常处理try:"被监测的代码(可能会出错的代码)"except:错误类型ase: "针对上述错误类型制定的方案"print(e)#万能异常exceptExceptionase:print(e)小练习#练习题利用while循环,迭代器对象和异常监测来完成for的功能l1=[11,22,33,44,55,66,77,88,99......
  • [学习笔记] 凸包
    凸包由于\(Andrew\)算法较快,所以主要介绍\(Andrew\)的实现方式我们把输入按照\(x\)为第一关键字,\(y\)为第二关键字进行从小到大排序,保证了\(1\)和\(n\)两个端点把凸包分成了两个部分(称为凸壳),从\(1\)遍历到\(n\)再从\(n\)遍历到\(1\),把遍历到的点压入栈,使......
  • 算法练习-day43
    动态规划392.判断子序列题意:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。实例:思路:本题我们的思路和1143. 最长公共子序......
  • new Thread().start(); - 多线程练习
     用Java创建一个线程是这样的:Threadthread=newThread();要启动Java线程,您将调用其start()方法,如下所示:   thread.start();此示例未指定要执行的线程的任何代码。线程启动后会立即再次停止。所以要往线程里写入代码。Threadthread=newThread(){@Override......
  • c#练习题2
    第一题代码#include<stdio.h>intmain(){printf("*\n"); printf("*\n"); printf("*\n"); printf("**\n"); printf("**\n"); printf("*\n");return0;}第2题代码#incl......