02 2020 档案
摘要:"费解的开关" 利用逆推,得出6步之内可以得到的状态,剪枝之后,可以在规定时间内完成。
阅读全文
摘要:"递归实现指数型枚举" 状态压缩: 分别遍历每一个状态即可。
阅读全文
摘要:"最短Hamilton路径" 利用动态规划可以很好地解决这个问题。 中 i 利用状态压缩,可以表示已经走过了多少个点,j 表示的是当前所在点。
阅读全文
摘要:"C2 Skyscrapers (hard version)" 分别用 表示在 i 位置能取到的左边的值之和,右边的值之和。 利用单调栈的思想。 降低复杂度的方法是,充分利用重复计算的数据,将其保存下来,避免多次计算。
阅读全文
摘要:快速乘 参考: "小技巧1——长整型:64位整数的乘法模运算" 当 a 和 b 都大于1e9的时候,为了防止溢出,就需要一个算法,叫做快速乘。 实现方法一: 将乘法转换为加法,并且伴随着取模操作的进行,可以保证不会溢出。 而为了加速加法操作,可以利用快速幂的思路,对加法操作进行优化,复杂度为$O(l
阅读全文
摘要:"Blocks" 利用递推的想法得到一个递推公式,在本质上它是一个 dp 的题目,但是由于 n 过大,不能使用 dp 解决,所以将递推公式化为矩阵乘法,所以可以用矩阵快速幂进行优化。
阅读全文
摘要:"E. 1 Trees and Queries" 该题需要用 lca 进行优化。 在树中求两点间的距离的方法为:
阅读全文
摘要:"D Shortest and Longest LIS" 因为要使最长上升子序列分别为最小和最大,所以可以先分别让序列为 和`1 2 3...n 2 n 1 n`,然后再让序列满足题给条件,要注意的是连续的“”应该进行翻转操作。 通过这道题应该想到的东西是,题给条件所要求的“ ”、” define
阅读全文
摘要:"D Domino for Young" 参考: "Codeforces Round 609 (DIV 2) D. Domino for Young" "D. Domino for Young" 题解的想法是将图形进行黑白交替染色 类似于: 黑白中个数最少的那个即是答案:
阅读全文
摘要:"D Time to Run" "Codeforces Round 619 (Div. 2) Editorial" 特别要考虑到只有一行或者只有一列的情况。 如果由 k 直接正向推路径的话,难免会要考虑到很多种情况,不如先得到全部走完的路径,然后再从末尾开始减,一直到 k。另外,可以对将要输出的向量
阅读全文
摘要:"C Ayoub's function" 参考: "Codeforces Round 619 (Div. 2) Editorial" 当从正面计算感觉很困难的时候,不如从反面来想,这是利用了容斥的思想。 我们只需要用所有子串的个数减去只包含0的子串个数即可。 而要是只包含0的子串的数量最少,那么就要
阅读全文
摘要:"C Long Beautiful Integer" 对于这种思维题,其得到的规律不重要,重要的是得到规律的过程,在写题的时候,应该在纸上模拟得到样例的过程,这样有利于看出规律,因为相比于在脑海里想规律,在纸上表现出来的规律更加直观。
阅读全文
摘要:"D Fill The Bag" 参考: "Educational Codeforces Round 82 A~E 题解" 因为这道题的 是2的幂次方,相当于是提示了我们需要用位运算来进行解决。 相当于二进制中的每一位,我们要做的是把 填进 n 的每一位中,一个 只能填一位。 低位的数字可以填高位,
阅读全文
摘要:踏踏实实训练了一个寒假,总算是有些许起色,cf现在也打到了1640+,离1700就还有一步之遥,冲啊! 《挑战程序设计竞赛》也已经看了一半了,冲冲冲!
阅读全文
摘要:"E Water Balance" 从头开始直接模拟即可,将这 n 个数分成很多个模块,如果发现一个模块可以降低前面一个模块的平均数,则跟前面一个模块合并,以此类推。
阅读全文
摘要:"D Aerodynamic" T所表示的图形就相当于是把原点放在P所表示的图形的边缘,然后不断的把图形平移,绕原点旋转,原点始终位于P所表示出的图形的边缘。 这样一来可以意识到只有当原图形是中心对称图形的时候,T与P才会相似。 "证明图形为中心对称图形"
阅读全文
摘要:证明图形为中心对称图形 ①有偶数个点 ②所有第 i 个点和第 n/2+i 的中点的位置都一样
阅读全文
摘要:分块 数据: 初始化: 区间查询: 区间更新和区间查询差不多,有些时候需要用一个 来进行整块区间的加减操作。
阅读全文
摘要:"K th Number" 两种写法:分块、线段树(归并树) 区间种第 k 个数的特点是:①在区间中不超过 x 的数不少于 k 个②在区间中小于 x 的数有不到 k 个 分块: 所以可以对答案进行二分,然后在判断是否满足的时候利用分块进行优化。 如果直接用作为桶的大小的话,复杂度
阅读全文
摘要:"A Simple Problem with Integers" 这道题目只涉及区间修改以及区间查询,所以只要我们利用线段树或者树状数组进行优化,这道题就很容易解决了。 树状数组:因为树状数组本质上之能涉及单点更新,所以,当遇到区间更新的时候,可以尝试将其通项分解为 n 个维度,这样就可以通过 n+
阅读全文
摘要:"Crane" 因为这道题需要需要对数据进行多次修改以及多次查询,而且涉及区间修改,所以最高效的办法就是利用线段树对其进行优化。
阅读全文
摘要:"F Berland Beauty" 因为这道题的 n 只有5000的范围,所以直接暴力用的写法也是可以的,只需要先 dfs 一遍,把每一条边都赋为其可能达到的最大值,然后再把所有的数据再 check 一遍即可。当然这道题也可以用树链剖分来进行优化。
阅读全文
摘要:"E2. String Coloring (hard version)" 首先我们要明确一点,最多只会出现26种颜色,因为当下字母 如果在后面 出现过,那么在 i 这个位置的最佳颜色选择即为先前确定的颜色。所以我们可以使用状态压缩来记录状态。
阅读全文
摘要:"Paint Color" 该题关键就在于坐标离散化,然后要注意的一点就是把点坐标表示为每一个格子的坐标。
阅读全文
摘要:坐标离散化 在一些数据范围很大,但是又只需要保存一些直线的情况下,不需要把整个地图都记录下来,只需要把直线及其前后行列保存即可。这样数据范围最多为。n 为直线条数。 测试数据:
阅读全文
摘要:"D. Irreducible Anagrams" 存在只有三种情况: ①长度为1 ②长度为2,且 ③长度大于2 ①和③很容易可以得出,这里只证明一下情况② 假设只存在 a,b,开头和结尾都是 a,那么匹配肯定是这样的:$\begin{cases}a...
阅读全文
摘要:超大背包问题 输入条件: 解法:因为不能够再像前面的背包问题一样,把背包容量作为状态来储存了,因为开不了那么大的空间,那么就应该好好利用 n 很小的这个优势,但是如果全部遍历的话,复杂度就是$
阅读全文
摘要:"4 Values whose Sum is 0" 如果直接暴力枚举的话,其复杂度为,这是必然超时的。 但是如果把这四个序列分成两半,通过遍历一半,而到另外一半去进行二分查找的话,复杂度就可以降为。 cpp // Created by CAD on 202
阅读全文
摘要:"Physics Experiment" 这个题的关键就在于理解这个弹性碰撞,多个球之间的碰撞可以理解为是互不影响的,可以当作是擦身而过而不是相撞,最后再将其排个序即可。
阅读全文
摘要:二进制表示集合 空集: 只有第 i 个元素的集合: 向集合中加入第 i 个元素:`S|1 枚举的所有子集: 枚举 sup 的所有子集: 枚举的所有子集大小为 k 的集合的方法: ① 的值就是将其最低位的1独立出来后的值 ② 就是将
阅读全文
摘要:"Face The Right Way" 对于一些题目只能够进行暴力而又很容易超时的题目,只能够想办法去将其进行不断优化,不断降低其复杂度,才能解决。 反转操作只会影响 k 长度内的牛,所以,因为其连续性,我们可以用一个 sum 对其进行简化, 而不是每一次要用到的时候再临时来算。
阅读全文