自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 The Doors POJ - 1556

题目链接:The Doors思路题意:要求的是在一个空间内有许多墙,每个墙上有两扇门你要从最左边中点去最右边中点的最短路。把每扇门看作是两个点然后利用计算几何的知识来判断一下两个点所形成的线段与图中的墙(也就是线段)有没有相交,规范相交与重合才算相交(对于非规范相交还要看是否重合),对于不相交的两个点之间建立边,然后跑dijkstra最短路即可。两线段相交判定//`两线段相交判断` //`2 规范相交` //`1 非规范相交` //`0 不相交` int segcrossseg(Line

2020-12-05 20:04:46 146

原创 Intersecting Lines POJ - 1269

题目链接:Intersecting Lines思路题意:给出你两条直线,求出这两条直线的关系,平行输出NONE,重合输出LINE,相交输出交点POINT x y模板题,理解直线关系的求法即可。直线与直线的位置关系 //`点和直线关系` //`1 在左侧` //`2 在右侧` //`3 在直线上` int relation(Point p) { int c = sgn((p - s) ^ (e - s)); if (c < 0)return 1; else if (c

2020-12-05 19:54:27 132

原创 Segments POJ - 3304

题目链接:Segments思路题目要求一条直线,使得所有线段在该直线上的投影至少有一个公共点。多画几个图,可以发现,问题实际转化了找到一条直线,使得与所有线段相交。给出来的点肯定都是有用的,猜一猜就知道要在所有线段的端点中枚举两个点, 连成一条直线,判断其它线段是否与该直线相交即可。(简单证明:假设有一条直线A,与线段B线段C分别交与2点,此时我们可以通过恰当的旋转直线,将每条线段的其中一个端点作为交点,本题即假设已存在这样一条直线已与2条线段相交,然后去枚举其它线段判断相交即可)直线和线段相交

2020-12-05 19:48:38 117

原创 Toy Storage POJ - 2398

题目链接:Toy Storage思路这个题和上个题做法一致,只是输出变了,而且加个排序。点与直线的位置关系 //`点和直线关系` //`1 在左侧` //`2 在右侧` //`3 在直线上` int relation(Point p) { int c = sgn((p - s) ^ (e - s)); if (c < 0)return 1; else if (c > 0)return 2; else return 3; }主函数int n,m;in

2020-12-05 19:42:00 109

原创 TOYS POJ - 2318

题目链接:TOYS思路:很明显的计算几何题,需要用到叉积判断点在线段的左边还是右边暴力的话 n2n^2n2 的复杂度会超时,这里利用二分优化(一个点必然是落在一条直线的右边及下一条直线的左边),把地图的左右边界各自作为一条直线插入,并且考虑到存在点落在边界的情况,这两条新加的直线要对应向地图外偏移一点。点与直线的位置关系 //`点和直线关系` //`1 在左侧` //`2 在右侧` //`3 在直线上` int relation(Point p) { int c = sgn((p

2020-12-05 19:37:00 97

原创 二维计算几何基础

图形的记录点在平面直角坐标系下,点用坐标表示,比如点 (5,2) ,点 (-1,0) 什么的。我们记录其横纵坐标值即可。用 pair 或开结构体记录均可。在极坐标系下,用极坐标表示即可。记录其极径与极角。向量由于向量的坐标表示与点相同,所以只需要像点一样存向量即可(当然点不是向量)。在极坐标系下,与点同理。线直线与射线一般在解数学题时,我们用解析式表示一条直线。有一般式 Ax+By+C=0Ax+By+C = 0Ax+By+C=0,还有斜截式 y=kx+by = kx+by=kx+b ,

2020-12-03 22:06:53 1389 1

原创 计算机网络知识点大杂烩(自用,更新中)

编码方式不归零制:正电平代表1,负电平代表0归零制:正脉冲代表1,负脉冲代表0曼彻斯特编码:位周期中心向上跳变代表0,位周期中心向下跳变代表1差分曼彻斯特编码:在每一位的中心始终都有跳变,位开始边界有跳变代表0,无跳变代表1最基本的三种调制方式限制码元在信道上的传输速率的因素有以下两个:信道能够通过的频率范围信噪比:10*log10(S/N)例如,当S/N=10时,信噪比为10dB,而当S/N=1000时,信噪比为30dB。码分复用CDM特点:每个站点分配的码分序列不仅.

2020-11-30 20:36:40 984

原创 PTA 1147 Heaps (30分)

题目链接:Heaps思路:根据层次遍历建树。从根节点做一次dfs,记录每个节点的父节点。依次检查每一个元素是否合法即可,即但凡有一个元素大于父亲元素就不是Max Heap,但凡有一个元素小于父亲元素就不是Min Heap。代码实现:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int> PII;typedef struct Tnode *p;

2020-11-25 22:50:32 96

原创 PTA 1143 Lowest Common Ancestor (30分)

题目地址:Lowest Common Ancestor思路:根据二叉搜索树的特点,其中序遍历就是从小到大的排列,所以可以根据中序遍历加前序遍历构建二叉树。从根节点开始dfs得到每个节点的深度及父亲。利用LCA算法不断的找最近公共祖先即可。可以利用set查找元素。代码实现:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int> PII;type

2020-11-25 22:43:55 119

原创 PTA 1133 Splitting A Linked List (25分)

题目地址:Splitting A Linked List思路:所有节点用结构体{id,data,next}存储。遍历链表,依次找出在链表中的节点,放入容器v中。把节点分成三类(负无穷,0),[0,k],(k,正无穷),按段,按先后顺序依次放进容器ans中,最后输出即可。代码实现:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int> PII;t

2020-11-24 11:57:04 116

原创 PTA 1135 Is It A Red-Black Tree (30分)

题目地址:Is It A Red-Black Tree思路:根据二叉搜索树的特点,其中序遍历的结果就是从小到大的结果,再结合给出的前序遍历就可以构建出二叉树。从根节点开始搜索,若发现红色的节点,检查左,右儿子是否都是黑色节点,若存在红色节点则为No。从根节点开始搜索,检查每个节点的“深度”是否合法。特判根节点的颜色。代码实现:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef p

2020-11-23 23:07:14 223

原创 C++ 二叉排序树(二叉查找树、二叉搜索树)

1.定义二叉排序树(Binary Sort Tree)又称二叉查找树、二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也分别为二叉排序树;2.插入操作:从根节点开始,若需要插入的值小于该节点则递归进入左子树,否则递归进入右子树,直到递归到空节点为止。关键字序列:45 24 53 12 37 933.查询操作:查询过程比较简单,首先将关键字和根节点的

2020-11-19 21:18:07 763

原创 PTA 1127 ZigZagging on a Tree (30分)

题目地址:PTA A1127 ZigZagging on a Tree思路:根据中序和后序序列建树。层序遍历该树,若该层flag为1直接打印,否则压入栈中逆序打印,每层flag要取反。代码实现:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int> PII;typedef struct Tnode *p;const int N=35;int

2020-11-19 11:33:49 141

原创 C++ 已知二叉树两种遍历序列,构建二叉树

已知先序遍历和中序遍历,可以求出后序遍历已知后序遍历和中序遍历,可以求出先序遍历已知先序遍历和后序遍历,不可求出中序遍历1.已知先序遍历和中序遍历,求后序遍历1.1 思路:已知先序遍历是先遍历当前二叉树的根,然后递归遍历左子树和右子树。再由中序遍历根的位置可以得出左子树和右子树的长度(大小)。再将左右子树的长度带入先序遍历,就可以得出左子树的先序遍历和右子树的先序遍历,结合左右子树的中序遍历,就可以递归求解。1.2 代码实现:#include <bits/stdc++.h>u.

2020-11-19 11:13:04 317

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除