06 2019 档案
摘要:"题目" 按理来说是可以二分的,但是发现其实直接暴力然后注意细节就可以了。 先找到牛所在的起点,然后分别向右找和向左找。 第一次查找从r点冲到l点时,突破不了l,从l点冲到r,能突破r,要给r加多少,然后取min,每次l,r并不需要返回原先值,原因是l没有增加前
阅读全文
摘要:"题目" 题意:求最小的从某一个点到其余点的切比雪夫距离和。 将一个图中的(x,y)坐标转到新坐标(x+y,xy)后,图中的曼哈顿距离就是新图中的切比雪夫距离, 证明:分类讨论, 1.x2x1,y2y1时,x2x1+y2y1=x2+y2(x1+y2)就是新坐标的X差。 2.$
阅读全文
摘要:"题目" 搜索+剪枝,主要考察细节和搜索的顺序,首先可以发现所有数据均为整数,所以初始化每层的蛋糕R和H是整数,然后从高层向低层搜索,然后预处理出各层向低层的最小面积和体积用来剪枝。 就可以每层从当前最大半径向最小半径枚举,并分类讨论加剪枝即可。 c++ include using namespac
阅读全文
摘要:"题目" 贪心,可以用分类讨论的方法,可以得出如果n2枚举则会过不了,而我们观察原题中的式子,有: ∣x1−x2∣+∣y1−y2∣ 发现式子中的绝对值很恶心,而考虑如果没有绝对值的话会有四种情况。 1. (x1x2)+(y1y2)=x1+y1(x2+y2) 2. $(x1 x2)
阅读全文
摘要:"题目" 方法很多,最经典的是用搜索的算法,也就是IDA算法搜索。 IDA算法是每次规定一个搜索深度,并在搜索的时候限制该搜索深度,从而达到把深搜的优点和广搜的优点结合起来优化时间的一个算法。 说白了,就是一个剪枝借鉴了广搜的思想。 c++ include using namespace
阅读全文
摘要:"题目" 该题目就是求这n个数的前缀和所组成的数组的所有子区间的左端点和右端点相差不超过m,且他们的前缀和差最大,求出这个最大值即可。 而朴素算法肯定会T,而我们发现如果前缀和最大的话,则前缀和的值一定是满足单调递增的,因此可以用单调队列优化。
阅读全文
摘要:"题目" 一道单调栈裸题,主要是用单调栈维护单调性,和单调队列都可以在O(n)的时间内得出单调最大值或最小值,要比堆要快。 这个题可以用h来当做单调栈的使用对象,即用单调栈来维护高度,高度是越在栈深处越大,元素下标是越在栈深处越小。 Code:
阅读全文
摘要:"题目" 最短路+DP 最短路可以用floyd或者spfa来处理出1到n的所有时间区间的最短路。 dis[i][j][k][l]表示i到j在k,l时间内每个时间点都能走的节点的i,j之间的最短路。 因此我们可以预处理出来最短路,然后开始DP,设置dp[i]为1到i之间的所有时间的最短
阅读全文
摘要:"题目" 搜索加贪心其实并不需要用到DP,搜索也是比较简单地搜索。 对于每个第一行的城市进行类似于滑雪那道题的搜索,然后记录最后一行它所覆盖的区间,易得一个一行城市只会有一个区间。然后可以在最后进行线段覆盖贪心即可求出答案。要注意区间闭开和边界问题。 Code
阅读全文
摘要:"题目" 堆+模拟,还有一个小优化(优化后跟堆关系不大,而是类似于贪心)。 如果不加优化的话,卡常可以卡到85。 思路是对于对每一秒进行模拟,用堆来维护动态的最大值,然后对于每个长度都加q的情况可以用一个中间变量temp来处理。 85pts的Code : c++ include include
阅读全文
摘要:"题目" 跟奶酪那道题差不多,用并查集来求解。 用二分,或可以用类似于克鲁斯卡尔算法的贪心来每次判断是否起点和终点已经并在一个集合里(类似奶酪) 如果已经覆盖就结束判断并得出答案:即当前选择的边的最大值。 为什么是边的最大值呢。 我们考虑最小的工作半径一定是等于两点间的一个距离,如果大于一个两点间的
阅读全文
摘要:"题目" 暴力能得30,正解需要其他的算法操作,算法操作就是用秦九韶算法来优化。 秦九韶算法就是求多项式的值时,首先计算最内层括号内一次多项式的值,然后由内向外逐层计算一次多项式的值,然后就将求n次多项式的算法转化为求n个一次多项式的算法。 但是这样只能得到30分,用高精也只能拿50分,
阅读全文
摘要:离散化 离散化适用于数据的权值不重要,数据权值之间的相对位置及大小关系重要的一种优化方法。而离散化也有许多方法,其中各有好坏。 1.排序解法(可处理重复元素) bool cmp(ha c, ha b) { return c.num
阅读全文
摘要:可持久化数组 可持久化数组相比与一般的数组来说多了一个限制条件:可持久化。 原题中的数组则可以用线段树来优化。 而可持久化的暴力解法就是对于每个操作都开一个线段树,可是这样的耗费空间都太多了,因此我们选择动态开点。 动态开点: 定义结构体的时候就不能像普通线段树一样来定义了,应该定义为 我们可以在原
阅读全文
摘要:"题目" LCT,或者并查集水过。 首先并查集这道题不能路径压缩,因为路径压缩是为了用牺牲一些信息的方法来加快速度,可是这道题我们需要这个信息,所以不能路径压缩。 剩下的操作就只剩下了暴力并查集,而每次查询前都要使u所在的树换根,使u换为该树的根,可以方便查询。
阅读全文
摘要:"题目" 不看数据范围的话是一个很简单的DP,可是加上数据范围之后就之前的做法就不行了。 所以我们考虑一下路径压缩。 小数据Code c++ include include include using namespace std; int l, m, s, t, dp[100010]; int fl
阅读全文