算法
文章平均质量分 79
Laaahu_
这个作者很懒,什么都没留下…
展开
-
HDU - 4553 约会安排 (线段树区间合并)
题目链接 : HDU - 4553题意:一个人拥有T的总时间, 和M件要做的事情。三种事情:一是屌丝基友约他出去玩, 他如果在某个时间段内有一段连续时间就和基友出去玩,相应的那段时间将会被占用。二是女神约她出去, 他会在自己的安排结束的时间段内去找一段连续时间和女神去约会,相应的这段时间也被占用将不再被后面的事情使用。如果在这段时间里没有找到他就会去,找已经被基友占的时间,会选择放基友的...原创 2019-11-20 20:47:27 · 455 阅读 · 0 评论 -
2016大连icpc区域赛A(HDU - 5971) (带权并查集)
题目HDU - 5971题意在一场比赛中有好的运动员和较差的运动员,现在每两个运动员之间有一场比赛,而且,确定了这两个人之中必定有一个是好的,另一个是较差的。而且还会知道几个人到底是好的还是较差的,最后就问你是不是可以将其所有人准确的分成两部分。输入 N,M,X,Y分别表示一共有几个人,几场比赛,几个已知的好运动员,几个已知的较差的运动员,后续X行会输入好运动员的编号,Y行会输出差的运动员...原创 2019-10-17 17:40:04 · 333 阅读 · 1 评论 -
龟速乘&O(1)快速乘&快速幂&矩阵快速幂板子
龟速乘://快速乘O(logn)防止爆 long long 时使用。inline ll mult_mod(ll a, ll b, ll m){ ll res = 0; while(b){ if(b&1) res = (res+a)%m; a = (a+a)%m; b >>= 1; } retu...原创 2019-10-17 09:49:16 · 511 阅读 · 0 评论 -
动态规划———背包总结详解
01背包问题1.题目: 有N件物品和一个容量大小为V的背包,放入第i件物品的耗费是Vi,得到的价值是Wi,求解装入那些物品使得得到的价值最大。2.特点:每个物品只有一件只需要考虑这件物品有要不要放即可。3.dp数组及含义: 我们可以很容易想到的东西就是用一个二维数组去保存一下,dp[i][j] : 意义就是前 i 件物品恰好放入一个容量为 j 的背包可以获得的最大价值(这里的恰好放入不一定...原创 2019-10-16 20:55:58 · 305 阅读 · 1 评论 -
动态规划———最长公共子序列(LCS)
最长公共子序列;言简意赅就是在两个序列a,b里找同时是a,b两个序列的子序列并且相同的长度最长的那个。我们用一个二维的dp[i][k]去表示以a[i]结尾和以b[j]结尾的最长的公共子序列的长度。这样的话就可以很容易得到更新的dp[i][j]的方程。我们来理解这个方程为什么是这个样子的,dp[i][j]表示的是以a[i]结尾的子序列和以b[j]结尾的子序列的最长长度。那么,我们来想一...原创 2019-10-15 22:29:39 · 230 阅读 · 0 评论 -
计算几何(立体几何)基础篇
还是直接看板子,根据板子上面的注释学内容。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const double eps = 1e-8;int sgn(dou...原创 2019-08-12 18:19:14 · 642 阅读 · 0 评论 -
2019 SUST暑期集训题解(计算几何(二))
A . 梦想成为天文学家这道题是一个原题,我们要用向量的知识来解决它,求解的就是四点共面。//四个点三个向量 构成一个行列式 行列式的结果为0则共面否则不共面#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct p{ int x,y,z...原创 2019-08-12 22:47:55 · 246 阅读 · 0 评论 -
HDU 3974(Assign the task)线段树维护dfs序
题目:在这里啊题意:一个公司有一个老板及许多员工 ,除老板外,每个员工都有自己的领导,然而每次分配工作之后,如果自己的领导得到了工作则自己也会去干相同的工作。每次询问要问一个一人在干什么工作。思路:最简单可以想到的就是单点维护单点查询,这个我帮你们试过了,妥妥超时,所以我们要优化一下,要区间更新,单点查询,因为每个人都有自己的领导,所以从公司的老板开始做深搜,这样子之后统计一下每个点...原创 2019-09-03 22:09:32 · 401 阅读 · 0 评论 -
CF 242E (XOR ON SEGMENT)线段树维护区间异或,求和
题意:一个定长的数组,然后他有两个操作;①查询区间 【L,R】的区间和。②一个更下新操作,对区间【L,R】内的数分别与一个固定的值X做异或操作,结果作为这个位置的新的值。思路:异或操作是在二进制的基础上进行的,所以我们开20棵线段树,每一颗线段树 去维护一个二进制位的1个数。至于为什么存1的个数,我们来看看一个例子。例如,一个数组有四个数字,1到4分别为5,6,7,8;他们的 二进...原创 2019-09-10 12:28:53 · 981 阅读 · 6 评论 -
HDU 4578(Transformation)线段树区间更新及查询
题目:客官进来看看啊题意:四种操作:①对给定区间的所有值加上 一个数 c;②对给定区间的所有数乘上一个数 c;③将给定区间的所有数变为 c ;④输出一个区间的所有数的和,平方和,立方和 值 mod 10007。这道题第一眼就知道是一个线段树的题目, 这个很容易就可以看出来,最主要的是怎么将这些操作联系起来。思路:因为有三种更新操作,所以需要三个 懒惰标记 ,分别表示 加 , 乘...原创 2019-09-10 16:44:23 · 349 阅读 · 0 评论 -
大数高精度(加减乘除,取余,幂次)kuangbin模板C++实现
给一个例题吧:求卡特兰数卡特兰数的递推式 就是这个; f[i]=f[i-1]*(4*i-2)/(i+1);//卡特兰数递推式其余部分看代码;主要要学会使用模板中的各种运算函数。有注释,其实就是一个模拟的过程,大家自己看,应该比较易懂(感谢 kuangbin 大神)#include <iostream>#include <cstdio>#includ...原创 2019-09-17 16:52:39 · 573 阅读 · 0 评论 -
动态规划———单调子序列相关
我们要区分一下子序列和字串。简单的来讲就是子序列是可以不连续但必须保证与给定的原数组相同的顺序,字串就是必须连续并且保证与给定的原数组顺序相同。我们讨论的主要是子序列。最长单调子序列以最长上升子序列为例,讨论最长单调子序列。① d[i] = max{ d[j] | j < i && a[j] < a[i] } + 1;很眼熟的一个状态转移方程,但是只会这...原创 2019-09-22 18:26:18 · 463 阅读 · 0 评论 -
SUST暑期集训题解(可持久化数据结构)
A 可持久化线段树#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int maxn=1e6+10;const int M=maxn*40;int ...原创 2019-08-24 15:43:07 · 183 阅读 · 0 评论 -
2019 SUST暑期集训题解(计算几何(平面几何))
A 来,求个三角形面积玩玩。利用叉乘的特性就直接得到三角形的面积,如果三点共线则三点不构成三角形。此时叉乘结果为0.#include<iostream>#include<cstdio>#include<cmath>using namespace std;const double eps = 1e-8;int sgn(double x){ ...原创 2019-08-11 14:06:26 · 280 阅读 · 2 评论 -
计算几何(平面几何)基础篇
板子里面有注释。根据注释看内容。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const double eps=1e-8;const double inf=1...原创 2019-08-10 17:30:55 · 492 阅读 · 0 评论 -
两点搜索 FZU - 2150 Fire Game 两点BFS
两点搜索 FZU - 2150 Fire Game 两点BFS题意:在一个木板上有许多方格,每一个方格里面放有不同的东西,一种是草用‘#’表示另一种是‘.’表示什么都没有,有两个人可以分别去点燃其中的一个方格里的草,然后每隔一分钟火势会蔓延到与他相邻的上下左右四个格。‘.’的地方火势不可以蔓延过去。如果可以将里面的草全部烧完,要求解最小的时间是多少否则 输出 -1;思路:最多只可以点两...原创 2019-07-16 19:18:06 · 354 阅读 · 0 评论 -
HDU - 1043 Eight (八数码)逆向BFS+康拓展开hash判重+打表
HDU - 1043 Eight (八数码)逆向BFS+康拓展开hash判重+打表康拓展开不理解康拓展开的可以学习一下啊:https://blog.csdn.net/laaahu/article/details/96425860题意:在九个方格中每个方格都有一个数字,其中一个是x(后面我们会用0表示这个点),所以就是0到8这九个数字在一个3X3的方格里运动,每次x与其相邻的上下左右处的数字...原创 2019-07-19 00:02:42 · 838 阅读 · 0 评论 -
UVA - 11624 Fire!BFS(广搜)
UVA - 11624 Fire!BFS(广搜)**题目链接:**https://vjudge.net/problem/UVA-11624 vj上的。题意:在一个迷宫里有一个人和一堆火,这个人和火都可以在一个单位时间内移动到与其相邻的上下左右的方格中,所以题目要问的就是这个人能否在火势蔓延到自己所在方格之前离开这个方格,是否可以成功逃生(就是走到迷宫之外)。人和火都不可以穿墙 ,用‘#’...原创 2019-07-17 11:45:03 · 426 阅读 · 1 评论 -
搜索 BFS 非常可乐 HDU - 1495
搜索 BFS 非常可乐 HDU - 1495**题目链接:**https://vjudge.net/problem/HDU-1495题意:现在有一杯可乐和两个杯子,是否可以把这一杯可乐分成体积完全相等的两份。你可以将三个杯子中的可乐任意倒到其余两个杯子中但是操作结束之后你要知道每个杯子到底还有多少可乐,所以怎么倒很关键,你能随便倒这样你就不知道你是否将他成功分开了。如果可以输出最...原创 2019-07-17 14:48:37 · 633 阅读 · 0 评论 -
搜索 Find a way HDU - 2612 BFS
搜索 Find a way HDU - 2612 BFS题意:两个人Y和M要去同一家肯德基吃饭,然后问你怎么走所花费的总时间最少。‘#’代表的是墙不能走。思路:就是广搜开两个数组,虽然在同一个队列里面,但是标记一下之后更新与他相关的相关数组就可以了。我wa了几次,最后一定要注意 有可能以有一家kfc是被包围在墙壁里面的不可能到达,所以要对可以到达的kfc做一下标记。其余就是bfs的板...原创 2019-07-17 16:38:45 · 428 阅读 · 10 评论 -
SUST 2019暑期集训题解(差分约束+生成树+传递闭包)
A 这个不等式组很眼熟吧这道题的话上课讲过就是根据不等式建图然后跑一下最短路就可以了。#include<iostream>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn=1005;const int inf ...原创 2019-07-29 17:37:28 · 295 阅读 · 0 评论 -
HDU 3567 Eight II (八数码) 双向BFS 和 BFS打表
HDU 3567 Eight II (八数码) 双向BFS 和 BFS打表八个数码八重境界,说的很有道理。你们要是有精力可以把所有的都试一下 我干不动了 到这里就退了哈哈哈。如果没有做过1043的建议先去做一下1043.HDU1043附上1043的题解1043题解双向bfs:话不多说了来看一下题意。和1043很像 如果没做过1043可以做一下。区别就是 1043更简单,1043说的...原创 2019-07-21 09:48:36 · 1666 阅读 · 3 评论 -
HDU 4725 (The Shortest Path in Nya Graph)dijkstra
题意:这是带层的点,从本层的点到上下一层的任何一个节点的权值为c,也有一些点与点之间的路径。主要是建图,建图结束跑一下dijkstra就可以了。思路:我们主要说一下建图。我们可以把每个点的层数看成是一个节点从N+1开始标记。对于这个层数节点 我们对每个在这个层的点 建一条从层数节点出发到这个层的点权值为0有向边。然后对每个点到他的上、下一层建一条权值为c的有向边。最后再对m对点建边即可...原创 2019-07-30 16:19:28 · 372 阅读 · 0 评论 -
UVA - 12304(B - 2D Geometry 110 in 1!)计算几何板子
题意:这道题目就是单纯的计算几何的板子,我照着板子自己敲了一遍,希望大家不熟悉板子的也可以自己敲一下。两点:要选择适合自己的板子注意最后结果要排序题目要求的六种结果:三角形的外接圆三角形的内切圆过定点的圆的切线过定点并且与给定直线相切的圆与两条给定直线相切的圆与不相交的两个圆相切的圆#include<iostream>#include<cstdi...原创 2019-08-08 16:00:39 · 229 阅读 · 0 评论 -
POJ 1696(Space Ant) 多次求凸包
题意:有一只类似于蚂蚁之类的动物,由于 他的身体缺陷只可以左转不可右转,每天他它都要吃一个植物才可以活下去,如果没有食物可以吃了他就死,给你植物的坐标你要求的就是问他怎么选择吃食物的顺序才可以使自己活得长久。最开始他的坐标在(0,y),y是所有节点中纵坐标的最小值,所以第一个食物我i们直着走过去不用转弯就可以吃到。思路:因为只可以左转不可以右转所以我们每次吃的都应该是转的角度最小的那个,因...原创 2019-08-14 11:44:46 · 202 阅读 · 0 评论 -
POJ 1556(The Doors )计算几何(线段相交)+最短路
题意:要求的是在一个空间内有许多墙,每个墙上有两扇门你要从最左边中点去最右边中点的最短路。思路:把每扇门看作是两个点然后利用计算几何的知识来判断一下两个点所形成的线段与图中的墙(也就是线段)有没有相交,规范相交与重合才算相交,对于不相交的两个点之间建立边,然后跑最短路就可以了。细节请见代码注释。#include<iostream>#include<cstdio>...原创 2019-08-10 17:17:48 · 427 阅读 · 0 评论 -
POJ ——3414 pots BFS+路径回溯(记录路径)
POJ ——3414 pots BFS+路径回溯(记录路径)题目链接:http://poj.org/problem?id=3414题意:给你两个体积分别为A和B桶,你有三个可选择操作的方式:1.可以将任意两个桶的其中一个在水龙头上装满水。2.可以将任意两个桶的其中一个桶的水全部倒出来。3.可以将桶1的水倒入桶2,直至桶1的水全部倒完 或者 桶2已全部装满水。反向操作也可以。最终结果...原创 2019-07-16 12:53:52 · 384 阅读 · 0 评论