摘要:题目:传送门 题意:在一个凸多边形的卧室里,你要放两个半径都为 r 的圆形地毯,不能折叠,不能弯曲,可以相交,现在问你两个圆怎么放可以使得覆盖的总面积最大。输出两个圆心,有多种方案输出任意一种即可。 思路: 我们可以将多边形的每条边向里缩进 r 长度,得到一个新的多变形,再用半平面交求这个新的多边形
阅读全文
摘要:题目:传送门 题意:有一个多边形的岛,岛的四周都是海,问你岛上的点到离它最近的海的距离最大是多少。 思路: 这题实际上就是求多边形的核的最大内切圆半径。 求多边形内核用半平面交即可,关键是求最大内切圆半径。 可以让多边形的每条边向里缩进 x 个单位得到新的多边形,判断其是否存在内核。 可以二分这个
阅读全文
摘要:题目:传送门 题意:给你一个 n 个节点的多边形,问你是否至少存在一个点,使得在这个点可以看见多边形的边界上的所有点。 思路: 这题本质上就是求半平面交。 关于半平面交的讲解可以看这个博客:戳 #include <iostream> #include <stdio.h> #include <stri
阅读全文
摘要:题目:传送门 题意:让你求 2 <= n <= 400000, 1 <= ai <= 10000000 思路: 对每个二进制位单独考虑,若答案的第 i 位二进制位是 1,意味着有奇数对 (j, k) 满足 (aj + ak) 二进制第 i 位是 1. 那么考虑怎么算有多少对 (aj + ak) 满足
阅读全文
摘要:题目:传送门 题意:一个点最初在(0, 0),给你它的运动轨迹,保证是一个多边形,问你这个多边形边界上的格点个数以及多边形内部的格点个数和多边形的面积。 思路: pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示
阅读全文
摘要:题目:传送门 题意:求凸包面积 / 50 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #include <map> #include <vector>
阅读全文
摘要:题目:传送门 题意:起初有很多点,可以确定一个凸包,现在只给你部分点,问你部分点确定的凸包是否一定和最初全部点确定的凸包一样。 思路: 题意就是问给你的 n 个点是否能唯一确定一个凸包。 这种凸包叫稳定凸包。这里有个博客讲得不错:戳 那么需要修改一下求凸包的模板,把那些共线的点也存起来,然后再判断是
阅读全文
摘要:题目:传送门 题意:有 n 棵树,第 i 棵树位于点 (xi, yi),有 vi 的价值, Li 的长度,现在你需要建一个篱笆,把所有树围起来,你只能通过砍掉其中的一些树来获得建篱笆的材料。现在问你能顺利建成篱笆需要砍掉的树的价值最小是多少,如果有多种价值一样小的方案,输出砍掉的树数目最少的情况。
阅读全文
摘要:题目:传送门 题意:输入一个凸包的所有顶点,逆时针输出凸包的顶点 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #include <map> #incl
阅读全文
摘要:题目:传送门 题意:有一个 n 多边形城堡,先需在城堡外建围墙,使得围墙到城堡的距离不得小于 L,且围墙的周长最小。 思路:答案就是凸包周长 + 半径为 L 的圆的周长。 证明 A、B、C、D四个点,每个点都有 360 度, 然后,角1、2、3、4构成多变形的内角和为 360度,然后每个点,又要减去
阅读全文
摘要:题目:传送门 题意:有一个房子(用一条线段表示),从马路(用一条线段表示)看房子,有许多障碍物(用线段表示),问在马路上连续的一段线段都能看到完整的房子最长是多长。 思路:就是求线段交点,然后,把那些交点按 x 排序,最后求答案即可。 有个陷阱就是障碍物可能不在房子和马路之间。 #include <
阅读全文
摘要:题目:传送门 题意:给你一个圆和一个多边形, 判断多边形是不是凸多边形,如果是,接着判断圆是否在凸多边形内部。 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queu
阅读全文
摘要:题目:传送门 题意:给许多多边形, 判断多边形是否相交。 思路:输入输出挺恶心的,得模拟着做。 给正方形的对角线两点,求另外两点坐标可由下列四条式子推导得到: x1 + x3 = x0 + x2 y1 + y3 = y0 + y2; y1 - y3 = x0 - x2; x1 - x3 = y2 -
阅读全文
摘要:题目:传送门 题意:给你两条线段,问你这两条线段能接多少雨水,雨水从 y 轴正半轴往 y 轴负半轴垂直滴。 思路:有多种情况,讨论一下即可。 1、若有一条线段与 x 轴平行,那肯定接不了水。 2、若两条线段不相交, 也接不了水。 3、接口被遮住了,也不接不了水 第三种情况的判断可以通过,判断线段的上
阅读全文
摘要:题目: 传送门 题意:有 n 个正方形,倾斜 45 度按顺序放在 x 坐标轴上,然后那些正方形要尽可能的靠近,问排放好之后,你从上往下看,不会被遮住的正方形有哪些。 思路:我们可以算出每个正方形斜放的左右端点的 x 坐标。我们可以枚举前面已经放好的正方形,然后让当前这个正方形和它靠在一起算出当前这个
阅读全文
摘要:题目:传送门 题意:有 n 个测试样例,每个样例,输入四个点,前两个点代表一条线段,后两个点代表正方形的两个对角端点。 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <
阅读全文
摘要:题目: 传送门 题意:在一个左小角坐标为(0, 0),右上角坐标为(10, 10)的房间里,有 n 堵墙,每堵墙都有两个门。每堵墙的输入方式为 x, y1, y2, y3, y4,x 是墙的横坐标,第一个门的区间为[ (x, y1) ~ (x, y2) ],问你从 (0, 5) 走到 (10, 5)
阅读全文
摘要:题目: 传送门 题意: 给你 n 个点, 然后, 有一只蚂蚁, 问你蚂蚁只能直走和左转,问蚂蚁要怎么走才能走最多的点。 题解: 其实就是求很多个凸包, 蚂蚁肯定能走完所有点。 或者可以极角排序,先选左下角为基准点排序,然后之后更新基准点不断排序即可。 /// 凸包#include <iostream
阅读全文
摘要:题目: 传送门 题意: 给你 n 个点, 问你这些点中, 最远的两个点的距离的平方是多少。 题解: 挑战 261 有细讲, 求凸包 + 旋转卡(qia)壳。 旋转卡壳详解 码一: #include <iostream> #include <stdio.h> #include <string.h> #
阅读全文
摘要:题目:传送门 题意: 给你 n 条线段的两个端点, 然后有多次询问, 每次询问, 问你线段 x 和 线段 y 是否相交。 若线段 A 和线段 B 相交且线段 A 和线段 C 相交,那么线段 B 和线段 C 相交。 1 < n < 13 题解: 暴力求线段是否相交, 然后再跑个 Floyd 或者并查集
阅读全文