![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数学几何
嘘……一只bug
逆风的方向更适合飞翔,我不怕千万人阻挡只怕自己投降
——五月天《倔强》
展开
-
Poj Wall(凸包)
Wall题意已知一个多边形的城堡,现在用用最少的石头建造环绕城堡的城墙,但是城墙不能离城堡超过一定的距离L。问这个城墙最小的长度。思路首先知道,对于一条边,我们只需将它往外平移L个长度即可,至于顶点肯定做一个半径为L的圆(一部分)将两边连接起来,如果该顶点是一个凹点,那肯定没有将两边的点直接相连短,所以需要先构造凸包(如果不知道为什么要构造凸包,可以画一下,很好看出来)。至于圆弧的那部分,需要计算角度,容易知道图中角度1和角度2互补,先将角度2利用点乘公式(不能用叉乘,因为用asin函数一个值对应.原创 2020-10-22 17:53:43 · 175 阅读 · 0 评论 -
POJ A Round Peg in a Ground Hole (几何)
A Round Peg in a Ground Hole题意有一个多边形和一个圆,如果多边形不是凸多边形的话输出“HOLE IS ILL-FORMED”;如果圆在多边形内部则输出“PEG WILL FIT”,否则输出“PEG WILL NOT FIT”。思路先对多边形的顶点极角排序,用叉乘判断多边形是否是凸多边形。然后用叉乘判断圆心是否在多边形内,如果是的话,求出圆心到多边形每条边的距离与半径作比较,进而得出答案。 #pragma GCC optimize(2)//#include<b.原创 2020-10-21 09:31:14 · 73 阅读 · 0 评论 -
POJ Line of Sight (几何)
Line of Sight题意在房子和人行道之间有若干障碍物,它们都是用线段表示的,且都平行于x轴,问在人行道上能看到整个房子的最大连续长度是多少?思路数据中有障碍物不在房子和人行道之间的情况,这种情况不用考虑。这道题直接求答案不好求,我们可以逆着思考,先把由每个障碍物挡住的连续区间求出来,然后在总的人行道上找出没有被这些区间覆盖的最长的连续区间就是答案了。求一个障碍物挡住的区间:代码#pragma GCC optimize(2)//#include<bits/stdc++.h&.原创 2020-10-21 09:08:08 · 170 阅读 · 0 评论 -
POJ Pipe (几何)
Pipe题意有一个弯形的管道,给出每个上拐点的坐标,起点和终点也视为拐点。下拐点的y坐标是上拐点y坐标-1,x坐标不变,问从管道的左端点射出一条光线,光线能够到达的最远的x坐标是多少?思路这道题我考虑了极限法,即最远的光线一定经过两个拐点(可能都是上拐点,或者都是下拐点,也可能一个上拐点一个下拐点,当然最远的光线不止一条,但肯定有一条经过两个拐点,可以平移得到),然后枚举两个拐点构成的直线,判断是否合法,如果合法求它能到达的最远的x坐标。如何判断该直线是否与管道相交呢?我是求出相应的y坐标与上下拐.原创 2020-10-19 12:23:18 · 158 阅读 · 0 评论 -
Poj Kadj Squares (几何)
Kadj Squares题意给N个正方形的边长,沿着左下顶点逆时针旋转45度放置,此时一顶点在x轴上。第一个正方形的一顶点在y轴上,从左向右一次放置,允许边重合但不允许面积相交,求那些正方形从上往下看时可以被看到。思路一开始我是先求出来b的坐标,进而知道左右端点的坐标,然后判断举矩形是否被覆盖,不知道是写错了还是被卡了精度。后来发现我们可以将边长扩大2\sqrt 22倍,这时求的左右端点就都是整数了。然后根据左右端点判断是否被覆盖即可。代码#pragma GCC optimize(2)/.原创 2020-10-08 16:06:08 · 119 阅读 · 0 评论 -
POJ The Doors (构图+最短路)
The Doors思路这个题最难的就是建图了,建图之后求个最短路也就出来了,说下我的建图方法,首先我用pos[ ] 数组将起点和终点以及每个墙线段的端点作为图的顶点(去除墙根的两个点,因为没有意义)。然后用 seg[][]数组表示每个墙的各个线段的信息,seg[i][] 表示第i个墙的信息,这个数组的目的主要是为了:遍历pos[]数组的每两个点判断是否能建边,如果这两个点形成的线段被之间的墙挡住了(与该墙中某一个线段相交),就无法建边,否则建边。这里我再说一下判断线段a-b和c-d是否相交如何判断.原创 2020-09-28 10:15:53 · 115 阅读 · 0 评论 -
Poj Intersecting Lines (求直线交点)
思路有两个公式1.已知两点坐标(x1,y1,),(x2,y2).求直线方程(一般形式)Ax+By+C=0Ax+By+C=0Ax+By+C=0A=y2−y1,B=x1−x2,C=x2∗y1−x1∗y2A=y2-y1,B=x1-x2,C=x2*y1-x1*y2A=y2−y1,B=x1−x2,C=x2∗y1−x1∗y22.已知两直线方程(一般形式)A1x+B1y+C1=0A_1x+B_1y+C_1=0A1x+B1y+C1=0A2x+B2y+C2=0A_2x+B_2y+C_2=0A2x+B2.原创 2020-09-25 16:14:14 · 108 阅读 · 0 评论 -
Poj Segments (用叉乘判断线段相交)
Segments题意给出一些线段,问是否存在一条直线,使得这些线段在该直线上的投影有公共点思路我看一个大神的博客后,才知道该问题可以转化为是否存在一条直线m与所有的线段相交,与m垂直的直线l就是所求的直线。我们可以枚举两个线段的端点两两组合( 两个端点取自不同的线段),作为直线m的一个线段(实际上因为所给的线段是有限的,所以如果存在直线m的话,完全可以取该直线的一段与给定的所有线段相交),为什么我们枚举两个不同线段的两个端点所形成的直线就可以呢?假设这条直线存在,我们总是可以将该直线平行移动,直.原创 2020-09-24 20:25:11 · 194 阅读 · 0 评论