![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技巧
mis_deer
Make_myself.
展开
-
[ZOJ 3747] Attack on Titans (计数DP + 连续至多 + 连续至少)
有三种士兵(G,R,P)组成长度为N的队列 要求其中至少有连续的M个G,至多有连续的K个R 求排列的方案数首先用至多 NN 个的方案减去至多 M−1M-1 的方案 就可以得出至少 MM 的方案 问题就转化为只有连续至多的限制,求方案数 设 dp[i][j]dp[i][j] 表示第 ii 位为 jj 的合法方案数 因为是连续的,而每当限制刚超过的时候就要被减掉 所以对于的 ii原创 2017-05-23 17:21:35 · 514 阅读 · 0 评论 -
[POJ 1741] Tree (树的分治)
POJ - 1741 给定一棵树,计算长度不超过 K的链的个数树分治入门题,看着题解刷的 选定一个点,首先一条链要么在此点的子树上 要么这条链经过这个点 在子树上就可以划分为子问题,然后分治处理 经过这个点的链,可以把子树上的点到根的距离处理出来 然后对这些距离排个序,就能 O(n)统计选点要选重心,重心的所有子树大小不超过 N/2 这样保证分治至少是 logn层的,不会发生退化#原创 2016-07-20 18:22:55 · 272 阅读 · 0 评论 -
[HDU 5785] Interesting (Manacher+差分静态区间更新)
HDU - 5785 给定一个字符串 SS,定义三元组 (i,j,k)(i,j,k),其中 1≤i≤j<k≤|S|1\le i\le j <k\le |S| S[i...j]S[i...j]与 S[j+1...k]S[j+1...k]为回文串时,代价为 i×ki\times k 求所有三元组的代价和首先对 SS求一遍 manacher,然后就能求出所有回文半径 枚举 jj,预处理原创 2016-08-03 15:39:54 · 598 阅读 · 0 评论 -
[HDU 5726] GCD (倍增法+二分)
HDU - 5726 给定一个序列,每次询问一个区间 输出这个区间上所有数的GCD,以及GCD与其相同的区间个数赛上太智障了读错了题,以为是求得是GCD相同的子区间的个数一个连续区间的GCD,用倍增法预处理一下,就能做到 O(1)查询 对于相同区间计数,就把询问先离线一下 枚举区间左端点,区间GCD是随右端点递减的,并且是阶梯式的 并且这样一个阶梯递减的很快,可以当作log的 所原创 2016-07-19 19:25:12 · 2409 阅读 · 0 评论 -
[HDU 5413] CRB and Roads (拓扑排序+bitset卡时)
HDU - 5413 求问一个有向无环图内有多少个冗余边 冗余边的定义为,对于一条边 (u,v) 如果删去这条边,u依旧能到v,则此边是冗余边这道题看起来不可做的样子,看了下题解是暴力 对于每个点记录一下有哪些点可以到达这个点 由于是有向无环图,所以可以进行一个拓扑排序来解决求完之后,对于每个点,将其前驱按拓扑序排序 从前驱拓扑序大的开始处理,如果处理到一条边 发现其前驱在原创 2016-07-18 21:19:42 · 455 阅读 · 0 评论 -
[HDU 5412] CRB and Queries (整体二分)
HDU - 5412 动态区间第 K小很经典的题,可以用线段树套平衡树在线解决 但是这题貌似卡树套树,况且我也不会手写平衡树可以使用“整体二分”的分治思想解决将每个数据处理成 (x,y,v)(x, y, v)的三元组 其中 xx为这个数的下标,yy为大小,vv为 1时表示添加,-1表示删除 开始时读入 NN个数据,进行 NN次添加操作 修改操作视作删除这个数,然后在原位置再添加一个数这原创 2016-07-18 20:29:41 · 314 阅读 · 0 评论 -
[HDU 5762] Teacher Bo (鸽巢原理)
HDU - 5762 给定平面上的若干个点,问是否存在两个点对 A,B{A,B},C,D{C,D}使得前者的曼哈顿距离等于后者首先所有的坐标不会超过 10510^5, 意味这曼哈顿距离的范围在 00到 2×1052 \times 10^5之间 并且它只要判定是否存在解所以我们直接暴力枚举点对,然后把得到的曼哈顿距离标记一下 如果这个距离值之前已经出现过了,说明有解,直接跳出循环原创 2016-07-26 19:37:15 · 246 阅读 · 0 评论 -
[SCU 4532] interesting (数论+技巧+SPFA转移DP)
SCU - 4532 a1∗b1+a2∗b2...+an∗bn=Ba_1*b_1 + a_2*b_2 ... + a_n*b_n = B 给定 a1...ana_1...a_n,BmaxB_{max}、BminB_{min} 问有多少个B, Bmin<=B<=BmaxB_{min} <= B <= B_{max}, 使得 b1...bnb_1 ... b_n存在非负整数解首先原创 2016-07-15 08:35:51 · 312 阅读 · 0 评论 -
[HDU 5735] Born Slippy (机智暴力)
HDU - 5735 给定一棵树,要求从这个点到它祖先的链上不要求连续地选若干个点 使得序列中相邻点权的位运算和加上此点点权最大,设这个值为 f[i]f[i] 输出 ∑Ni=1i∗f[i]\sum_{i=1}^N i*f[i]赛上没看这题……赛后一看题解,发现是个暴力,所以果断写了一发 拿与运算举例,首先点权是固定的,所以只要求位运算和最大就好了 设 dp[i]=max(dp[原创 2016-07-22 17:17:54 · 877 阅读 · 0 评论 -
[SCU 4511] 任务 (状态优化DP)
SCU - 4511 给两个机器安排 N个任务,要求满足 1. 任务必须全部被安排到任一机器上 2. 同一时间一台机器只能运行一个任务 3. 任务 j(j<i)j (j < i) 必须在任务 i之前被安排 4. 在一台机器上运行的任务不能被打断 第 i个任务在两台机器上的用时分别为 ai,bia_i,b_i 要求所有任务的总用时最小这题我想了三天三夜,还是没原创 2016-05-23 13:18:29 · 386 阅读 · 0 评论 -
[SCU 4512] Goozy的积木 (状态优化DP)
SCU - 4512 有若干个积木,你可以选择将他放在 A塔,放在 B塔,或者不放 求在两塔高度相等的情况下,所能达到的最大高度朴素的想法是 dp[i][H1][H2]表示使用前 i个积木 A塔高度为 H1,B塔高度为 H2,dp存的是能否到达这个状态的一个 bool值 首先这样状态爆炸,所以依旧要合理调整状态位置 我们可以把最高塔的高度移到 dp存的最优值里, 然后状态里表示一原创 2016-05-23 13:20:26 · 511 阅读 · 0 评论 -
[POJ 3666] Making the Grade (序列DP+离散化)
POJ - 3666 给定一个初始序列,增减其中某些项 使得最终序列非严格递增或非严格递减 求增减量和最小为多少这题 A最多有 1e9,第一反应要先离散化之 这样一来,A最多就只有 2000了 然后就可以 DP了 设 dp[i][j]dp[i][j]为前 ii个数非严格递增,第 ii个数修改为 jj的最小代价 转移方程为 dp[i][j]=min(dp[i−1][0..j]原创 2016-06-10 10:44:53 · 378 阅读 · 0 评论 -
[SCU 4525] meixiuxiu学图论 (二分答案 | 最小生成树)
SCU - 4525 定义一个环的价值为环中最大边的边权 求图中所有环的最小价值二分的解法:二分最小的价值,然后在图中跑 大于mid值的边都割掉不走 特别无脑,特别暴力 时间复杂度 O(n∗logn)O(n*logn)学长提醒的最小生成树的做法:利用Kruskal,在加入一条边,发现生成一个环的时候 这条边的权值就是环中的最大边的权值 时间复杂度 O(n∗logn)O(n*lo原创 2016-06-05 14:28:10 · 332 阅读 · 0 评论 -
[HDU 5782] Cycle (bitset优化+脑洞)
HDU - 5782 给定两个长度相等的字符串 问他们的第 ii个前缀是否循环相等 循环相等的定义是,两个长度相等的字符串 其中一个字符串能通过循环移位得到另一个按照题解的说法,如果两个字符串循环相等 将 AA串拆成前缀和后缀,交换位置就能得到 BB串然后我对着题解懵逼了一小时,没懂接下来怎么做 还好 lcy打野强力辅助,我终于懂了一点利用一个 bitset,先预处理出原创 2016-08-04 08:59:26 · 825 阅读 · 2 评论 -
[HDU 5731] Solid Dominoes Tilings (轮廓线DP+容斥定理)
HDU - 5731 多米诺骨牌的矩形完全覆盖, 要求统计没有横切割线和竖切割线的方案数第一部分就是轮廓线DPDP的入门裸题 预处理出任意矩形大小的方案数 RES[i][j]RES[i][j] 不过我怀疑这部分不提前打表的过不了第二部分是一个容斥 先对列容斥,用状压的方式枚举出所有列的分割情况 然后计算,当前列分割情况下,行没有分割的方案数 dp[n]dp[n] 然后再用容斥,原创 2016-07-20 21:04:01 · 1341 阅读 · 0 评论 -
[Codeforces 510E] Fox And Dinner (网络流+分组建图)
Codeforces - 510E 有 N只狐妖,其中年龄加起来为质数的可以坐在一次 求一种方案,使所有人都坐成若干个环注意到每个人的年龄都大于等于2 这意味着所有的质数都是奇数 相邻两个一个是奇数,一个是偶数 所以整张图是一个二分图然后跑网络流 源点对奇数点连容量为 2的边 偶数点对汇点连容量为 2的边 中间奇数点对偶数点连容量为 1的边 表示每个点至多有两个邻居 最后原创 2017-01-25 16:20:39 · 336 阅读 · 0 评论 -
[Codeforces 486E] LIS of Sequence (LIS套路)
Codeforces - 486E 给定一个序列,问其中每一个值是否在 LIS上 如果在 LIS上,是否在所有LIS上判断是否在 LIS上,只要正反搞两次 然后把前后的加起来,看是否等于 LIS 判断是否在每一个 LIS 上 只要记录一下前面是 LIS的最大值 然后看是否能接到上面,也是正反各搞一次 感觉这个题挺重要的,今天又碰到一题需要这个作为前提#pragma commen原创 2017-01-21 18:17:03 · 266 阅读 · 0 评论 -
[Codeforces 486E] LIS of Sequence (LIS套路)
Codeforces - 486E 给定一个序列,问其中每一个值是否在 LIS上 如果在 LIS上,是否在所有LIS上判断是否在 LIS上,只要正反搞两次 然后把前后的加起来,看是否等于 LIS 判断是否在每一个 LIS 上 只要记录一下前面是 LIS的最大值 然后看是否能接到上面,也是正反各搞一次 感觉这个题挺重要的,今天又碰到一题需要这个作为前提#pragma commen原创 2017-01-21 18:16:28 · 340 阅读 · 0 评论 -
[Codeforces 333D] Characteristics of Rectangles (二分答案+鸽笼原理)
Codeforces - 333D 给定一个 N*M的表格,求其中一个子矩阵 使得这个矩阵四个角的最小值最大刚开始百思不得其解,怎么想都是暴力三方的 后来想到二分答案,问题就变成了平面上若干个点,求是否能围成一个矩形 然后发现围矩形好像也是三方的,那复杂度比起一般暴力岂不是更高 然后就投降了……经大爷指点,由于鸽笼原理,围矩形的复杂度不超过平方 具体就是枚举每一行,然后枚举这行的原创 2017-01-17 19:23:25 · 459 阅读 · 0 评论 -
[CSU 1808(湖南省赛16)] 地铁 (拆点建图+多源多汇最短路)
CSU - 1808 (湖南省赛16) 给定一张图,每条边有一个距离和颜色 问从 1到 n的最短路为多少 其中一条路径的长度不仅要算上距离 还要算上相邻两条边颜色的差如果对每个点记录从某个颜色转移过来的最短路肯定是不现实的 以边为点跑最短路肯定也是不现实的,这种做法与前者无本质区别 但在CSUOJ上这两种做法都能过,可能是数据比较弱 正解是拆点,一个点每连出去一条边,就原创 2016-09-06 22:17:38 · 687 阅读 · 0 评论 -
[Codeforces 585C] Alice, Bob, Oranges and Apples (Stern-Brocot Tree + 更相减损法)
Codeforces - 585C A和 B两个人玩一个游戏,开始时一共有 XX 个橘子和 YY 个苹果 A先拿出一个橘子,B拿出一个苹果,然后进行若干次操作 每次一个人将所有的水果给另一个人, 然后再从袋子里拿出与之前等量的两种水果 最后袋子里的水果恰好被拿完,求构造一个满足条件的操作序列如果知道 Stern-Brocot Tree 这个东西的话, 会发现整个游戏过原创 2016-08-24 16:33:52 · 609 阅读 · 0 评论 -
[Codeforces 103D] Time to Raid Cowavans (离线询问+等间距区间求和)
Codeforces - 103D 给定一个长度为 NN 的序列,有 PP 个询问 每次询问从下标 aa 开始,每次下标 +b+b,这样所有数的和先离线询问,对询问按 bb 从小到大排序 然后当 bb 比较小的时候 dp处理,当 bb 比较大的时候暴力算 取这个临界值为 N‾‾√\sqrt{N},这样就能以 (PN‾‾√)\mathcal{O}(P\sqrt{N})得解#pragm原创 2016-08-23 13:37:26 · 326 阅读 · 0 评论 -
[Codeforces 689D] Friends and Subsequences (二分+稀疏表)
Codeforces - 689D 给定两个序列 AA,BB,求问有多少个区间 [l,r][l,r]满足 max(A[l,r])=min(B[l,r])max(A[l,r]) = min(B[l,r])考虑枚举区间左端点,移动右端点的过程中 max(A[l,r])max(A[l,r])肯定越来越大,min(B[l,r])min(B[l,r])越来越小 用 d=max(A[l,r])−原创 2016-08-20 08:48:59 · 634 阅读 · 0 评论 -
[CSU - 1811 (湖南省赛16)] Tree Intersection (启发式合并)
CSU - 1811 (湖南省赛16) 给定一棵树,每个节点都有一个颜色 问割掉任意一条边,生成的两个子树中颜色集合的交集大小问题可以转化为任意一棵子树中, 这个子树中的颜色数量和只在这个子树中出现的颜色的数量 从 lcy大爷那里学到了机智的启发式合并的做法 对每个点维护一个 map 来记录这个点为根的子树中颜色的及其数量 然后dfs一遍,对每个节点启发式地将其儿子的map合并原创 2016-09-08 22:04:25 · 430 阅读 · 0 评论 -
[CSU - 1811 (湖南省赛16)] Tree Intersection (dfs序维护子树+离线询问+树状数组)
CSU - 1811 (湖南省赛16) 给定一棵树,每个节点都有一个颜色 问割掉任意一条边,生成的两个子树中颜色集合的交集大小这个是 dfs序处理子树 + 离线询问 + bit维护 的解法 首先问题转化为求解一个子树中有多少种颜色以及独有颜色的数量 用总的颜色数量减去独有颜色数量即为这棵子树的答案 先做一遍 dfs,再按 dfs序重新组建颜色序列 这样对子树的询问,就变成了对序列原创 2016-09-09 13:22:32 · 528 阅读 · 0 评论 -
[SCU 4516] Mingo's Game (斜率DP)
SCU - 4516 有 N个关卡,可以分为 K块,每个关卡都有个权值 tit_i 每次选择最早没有通关的关卡块,设这个关卡包含了[i,j][i,j]的游戏 选到最早没有通关的关卡是k, 选到 k的概率是 P=tk∑jx=ixP =\frac {t_k} {\sum_{x=i}^j x} 选到一个关卡一定能通关,花费一小时 求合理分块的情况下,通关所有关卡块的期望时间最原创 2016-05-23 13:41:35 · 250 阅读 · 0 评论 -
[HDU 5745] La Vie en rose (DP+bitset卡时)
HDU - 5745 给定两个字符串 AA,BB 每次可以将 BB串中相邻的两个字符位置交换 每个字符只能改变一次位置 问通过这样的方式,BB 能在 AA串的哪些位置成为 AA的子串 其中 |A|<=105|A|<=10^5,|B|<=5000|B|<=5000据说 kmpkmp是不行的,据说暴力匹配跑得比谁都快 正解复杂度还是很科学的 首先得出一个 dpdp式子,原创 2016-07-22 10:20:03 · 930 阅读 · 5 评论 -
[SCU 4510] TaoSama与煎饼 (序列DP+状态优化)
SCU - 4510 一条长度为 N的道路,其中每个点有个权值 有 M个道具,能使煎饼向前跳跃1、2、3或4步 保证所有道具使用完时,煎饼落在 N位置 求到 N位置的一条路径,使得煎饼沿路获得的权值和最大首先朴素的想法是用 dp[i][m1][m2][m3][m4] 表示煎饼在 i位置,使用 +1、+2、+3、+4的道具数目 分别为 m1、m2、m3、m4所获得的最大权值原创 2016-05-23 13:06:53 · 298 阅读 · 0 评论 -
[HDU 5288] OO's Sequence (序列DP)
HDU - 5288 定义 f(l,r)f(l,r)为区间内不被其他数整除的数的个数 求所有区间f(l,r)f(l,r)的和可以计算第 ii个数对于答案的贡献 在某个区间 [i−L,i−R][i-L, i-R]内,第 i个数不被其他数整除 设这个向左延伸的最大距离 LL,向右最大距离 RR 则答案就为 ∑Ni=1Li∗Ri\sum_{i=1}^N {L_i*R_i} 以计算 LL原创 2016-06-09 15:25:15 · 289 阅读 · 0 评论 -
[HDU 4569] Special equations (数学+技巧+脑洞)
HDU - 4569 给你一个多项式,求使得多项式 mod (P*P)的平方为 0的解刚开始题目扯了一堆 CRT啥啥啥的,其实是烟雾弹 注意到这题 P只有 1e4,意味着可以从 0..P-1 枚举出 x的解 因为根据 mod 的性质,以及 f(x)是多项式 如果 f(x)%P=0,那么 f(x+P)%P=0 所以只需要枚举 0..P-1就好了 但是这题求的是 mod P*P就比较麻烦,乘原创 2016-04-15 21:42:59 · 255 阅读 · 0 评论 -
[HDU 4565] So Easy! (数学)
HDU - 4565 求 ⌈(a+b√)n⌉%m\lceil{(a+\sqrt{b})^n}\rceil \% m 的值,其中 0<N<2310<N<2^31 这题有个取整,看起来似乎根本没法用快速幂,没法做 实际上需要一点数学技巧特别注意到,题目提出了 (a−1)2<b<a2(a-1)^2<b<a^2 令 Fn=(a+b√)n+(a−b√)nF_n=(a+\sqrt{b})^n+(a-\s原创 2016-04-15 16:46:41 · 215 阅读 · 0 评论 -
[POJ 2566] Bound Found (TwoPointer入门)
POJ - 2566 给你一组数,要求从中找出连续的一段,使得其和的绝对值尽量和 t接近这种求序列连续一段的情况,最适合使用 two_pointer的技巧了 不过 two_pointer的前提是,序列在某种意义上是单调的 不过这题难就难在序列里数可正可负,时大时小,所以并不能使用 two_pointer关键步骤,求出前缀和,再对前缀和排序 由于求的是绝对值,那么 sum[r]-sum[l]=原创 2016-04-13 21:47:33 · 241 阅读 · 0 评论 -
[POJ 1759] Garland (二分)
POJ - 1759 这题 WA了好久,事实证明我真的想多了啊 原先化简了半天的方程组,其实完全是没必要的 由题目条件,可以化出 Hn−Hn−1+2=Hn−Hn−1H_n-H_{n-1}+2=H_n-H_{n-1} 所以相邻彩灯的位置差是等差数列 直接二分第二个的位置,然后递推求出 B的位置 中途判一下有没有位置小于 0的就好了 水题!#include <cstdio>#includ原创 2016-04-08 14:05:06 · 264 阅读 · 0 评论 -
[HDU 1024] Max Sum Plus Plus (DP)
HDU - 1024 定义 dp[i][j] 为取第 i 个数的情况下,前 i 个数组成 j 组 得到的最大和 转移方程为 dp[i][j] = max(dp[i-1][j], max(dp[0..i-1][j-1]) ) + inpt[i] 意思是:考虑第 i 个数,要么把它和第 i-1 个数放到一组 (dp[i-1][j]), 要么另起一组,从0..i-1中转移 (max(dp[0..i-原创 2016-04-07 21:23:12 · 212 阅读 · 0 评论 -
[POJ 3764] The xor-longest Path (Tire树 + 贪心)
POJ - 3674 题意是给你一个树,每条边有一个权值,求得树上一条路径,使路径上每条边权值的异或和最大 首先用一个 DFS把根到任意点的路径的异或和求出来 xorv[i] 由异或的性质可得点 u和点 v的异或和即为 xorv[u]^xorv[v] ( 根到两点 LCA的异或和会消去) 然后问题就转化成在区间内找两个值,使得他们的异或和最大 与 LightOJ - 1269一样的做法,用原创 2016-04-07 20:47:59 · 385 阅读 · 0 评论 -
[LightOJ 1269] Consecutive_Sum (Trie树妙用)
LightOJ - 1269 题意是给你一个序列,求子序列区间异或起来的最大值和最小值 首先可以利用类似前缀和的形式预处理一下,inpt[i]^=inpt[i-1] 然后一段区间[l,r]的异或值就等于 inpt[r]^inpt[l-1] 然后问题就转化成了求区间两个数,异或的最大值和最小值,接下来就是问题的关键显然这是一个位运算的题目,通常都要按位,从高位到低位来考虑 先求最大值,如果某原创 2016-04-07 20:39:36 · 388 阅读 · 0 评论 -
[HDU 4334] Trouble (分治+二分查找)
HDU - 4334 给你五个数组,每组 N个元素 (N<=200) 问是否能在五个数组里各选一个数,使得和为0 思路是分治,然后再二分查找,降低复杂度1) 算出 S1S_1和 S2S_2所有元素的和的情况并排序,对 S3S_3和 S4S_4亦是如此 O(N2N^2) 2) 枚举 S3S_3和S4S_4的和数组与 S5S_5的和的情况 再在 S1S_1和 S2S_2的和数组里找其相反数 O原创 2016-04-07 19:24:39 · 288 阅读 · 0 评论 -
[HDU 4324] Triangle LOVE (拓扑排序,DFS)
HDU - 4324 题意是,一张有 N个点的图,保证每两个点之间有且只有一条有向边连接 求是否存在三元环 用拓扑排序判环,如果存在环,则一定存在三元环 证明如下: 不存在二元环 设存在 n(n>=3)元环 p1->p2->p3->…->pn->p1 1) 若存在边 p3->p1,则存在三元环 (p1->p2->p3->p1) 2) 若不存在 p3->p1,则必然存在 p1->p3原创 2016-04-07 19:14:21 · 248 阅读 · 0 评论 -
[CQUOJ 21412] 软妹币!软妹币!软妹币! (数学+DP)
CQUOJ - 21412 题意大致是,用若干不同的数中的某些数加减得到 1…n之间的所有数,需要的最少几个不同的数 赛上是找规律做的,虽然过了,但是感觉不太稳,赛后看了题解恍然大悟首先有这样一个事实,如果有 3个数可以表示 1..13 那么对于小于 13的n,答案至多为 3 所以我们可以考虑,用 i个数能够构造出的最大的数是多少设 dp[i]表示 i个数最大能表示 [1, dp[i]]原创 2016-04-07 19:01:35 · 396 阅读 · 0 评论 -
[POJ 3045] Cow Acrobats (贪心)
POJ - 3045 有若干头牛叠罗汉,每头牛有一个冒险值,为在其上面所有牛的重量,减去其力量值 问如何使得最大的冒险值最小 挑战上面的题,本来想着用二分答案的方法做 虽然觉得自己的思路没什么问题,但是 WA了 百度了一发题解,发现这题正解是贪心首先直观感觉力量大的,体重轻的应该在下面,但这有两个因素,不好确定 可利用调整法试图找出答案 假设我已经找到了答案排列 ( 猜想答案序列)原创 2016-04-07 18:57:17 · 359 阅读 · 0 评论