
其他算法
文章平均质量分 78
qkoqhh
这个作者很懒,什么都没留下…
展开
-
牛客国庆Day5B(蒙哥马利算法)
题目链接:https://ac.nowcoder.com/acm/contest/205/B?&headNav=www原来窝被这算法虐过么= =!这个算法其实是用来解决RSA中计算公钥的问题的,是个底层常数优化算法。。主要解决两个问题:蒙哥马利约减,即tp−1 (mod m)tp^{-1}\ (mod\ m)tp−1 (转载 2018-12-26 23:43:13 · 521 阅读 · 0 评论 -
bzoj3944(杜教筛+hash技巧)
这个是个常规的杜教筛,按上次的做法交上去会T,原因在于用了map。。。然后需要想办法不用map,手写hash是不可能手写的,所以去网上找解决姿势。。一个比较好的姿势是在存和M(k)的时候可以考虑用a[n/k]这种方式存(其中n是题目要求的)为什么可以这么存呢。。因为所有的k都是n除以一系列数得到的,而整除的顺序是对答案没有影响的,所以当把这些除数乘起来之后,枚举这些除数的积,就共有1....原创 2018-08-28 14:46:54 · 293 阅读 · 0 评论 -
nowcoder多校6G(最小割理解+dfs)
这个题出得比较新颖的。。简单地考验对最小割的分析。。感觉今年区域赛也可能会出这种。。首先在完全图上跑最大流其实也即跑最小割。。。然后将s和t放在两旁可以发现割中间点之间的边显然是没什么太大帮助的。。所以只能割连s的所有边或者连t的所有边。。然后可能会有个顾虑就是中间点之间的边会远远小于割去的边,其实边权是由距离形成的所以边权差并不会太大。。然后问题就变成了求每个点到所有点的距离和。。这个优...原创 2018-08-10 20:12:21 · 175 阅读 · 0 评论 -
hdu6268(点分治+树DP+bitset)
这是一道非常好的题,V8强力推荐。。题目链接:http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf(pdf不好复制所以就贴链接了。。一个很显然的思路是树上跑背包,然而O()绝对是会T的。。所以直接背包肯定是不行的。。背包的合并代价实在太高了。。然后万能的V8告诉窝萌可以借鉴链合并的方式来代替背包的工作,即不...原创 2018-08-05 20:01:31 · 811 阅读 · 0 评论 -
nowcoder多校5F(概率+BIT)
dp姿势不对导致复杂度直线上升qaq这个的期望主要是通过计算每个点的贡献,每个点都会发生交换,那么就看发生交换的概率了。。这个概率主要是让前面的size大于他的点不出现,那么把对立事件的概率乘起来再乘他本身出现的概率就可以了。。那么可以这么做。。按size从大到小算,每次将1-pi维护到前缀乘积中。。单点修改,单点查询肯定用bit啦。。 /** * ...原创 2018-08-03 17:13:13 · 156 阅读 · 0 评论 -
nowcoder多校5I(计数+bit)
题意看了半天(雾。。然后可以发现1个点一定可以,2个点只要连线不与y平行就可以。。然后考虑3个点的。。3个点的话画几次可以发现必须得是<的才可以。。然后4个点发现怎么画都画不出来。。然后主要是算3点的。。枚举顶点,需要找x比他小的,y和他不同的点个数。。分侧求出后乘起来即可。。然后这个可以按x从大到小枚举一下,用bit去维护对应y上的位置(当然要离散化)。。x相同的时...原创 2018-08-03 17:06:15 · 177 阅读 · 0 评论 -
nowcoder多校3E(双Hash)
这个听的黄dalao过的。。首先这个序列直接丢进map怕是要GG。。。看来只能自己手动Hash。。构造一个具有可加性的hash函数,差不多像(ax+b)%mod这种。。然后去头和加尾都是十分容易操作。。然而单hash就WA了。。调了好多参都没过。。改成双Hash一发AC。。。学到的东西就是多项式Hash和双Hash这两种姿势。。。然而貌似kmp找循环节就可以了。。这个交给万...原创 2018-07-26 22:58:53 · 125 阅读 · 0 评论 -
nowcoder多校3I(随机化算法)
这个概率。。真的是不造这么求。。然后注意到题目对精度的要求比平时要低。。所以就可以用随机化算法。。。然后得在三角形里面撒点求凸包了。。然而要保证撒点的平均性不是件易事。。自己也没学过概率论。。得简化一下。。方法就是平移和仿射变换。。假设n个点定下来。。那么经过平移和仿射变换之后,并不影响这个n个点构成的凸包的性质。。那么就可以把所有三角形变换到以坐标轴为直角边的等腰三角形。。(即三...原创 2018-07-26 22:40:25 · 297 阅读 · 0 评论 -
bzoj2791(基环树+倍增lca)
仔细分析其实只有3种情况。。一种是不在一个联通块上。。直接-1一种是在同一个外向树上。。在树里面做lca即可。。一种是要跨过环。。其实跨环的方式只有2个,维护一下深度,差分一下环的距离,就可以把2个求出来了。。然后按照要求去比较即可。。。最tm蛋疼的就是这题竟然卡树剖??让汪聚聚写了一下倍增快得飞起。。orz汪聚聚 /** * ┏┓ ┏┓...原创 2018-07-29 21:10:26 · 514 阅读 · 0 评论 -
hdu6305(笛卡尔树/分治)
这道需要注意到一点。。就是如果询问的区间如果覆盖了最大数,那么rmq一定是确定的。。故以这个最大数为分界,左右2个区间是完全独立的。。因此就可以采用分治的做法去做。。聪明的汪聚聚已经实现。。然后dls还给我们介绍了另一个数据结构——笛卡尔树。。这也是个二叉排序树。。然而其关键字满足堆的性质。。即根的权值最大。。然后用这个可以很轻松的表示出B数组元素需要满足的关系,即根是子树中最大的。。满足...原创 2018-07-24 15:09:00 · 817 阅读 · 0 评论 -
bzoj4753(分数规划+树形DP+背包DP+复杂度分析)
把0看做一个需要取的点,那么通过题目给的约束条件这就变成了一个树形背包DP。。然而这个比率貌似不好决策。。于是用分数规划,这样权值改变之后就变成常规树DP然后一个显然的做法是在已取根节点的前提下把子树的背包合并到根上面去,可是会发现合并背包的代价非常大,合并一次的复杂度能达到O(n^2),好像会炸(然后就一直不敢写事实上背包里面的无用状态非常多,只要用有效状态进行转移的话复杂度可以变得...原创 2018-09-12 13:05:46 · 731 阅读 · 0 评论 -
2018沈阳M(可逆背包+线性优化完全背包+生成函数)
题意:给定ai和bi,表示第i个商店有ai个商品可以买,单价为bi元,给出m个询问,问用c元在l~r商店买东西的方案数可能这是窝打acm以来做过的最好的题了。。学到了太多东西。。orz统计方案数的背包是可以逆的。。可以参考牛客多校2E。。然后显然可以做个前缀,求出前r个物品的背包,这个多重背包的复杂度是O(ncb),用二进制可以优化到O(nclogb),但是有T组数据的存在这个复杂度比...原创 2018-11-08 20:01:12 · 1336 阅读 · 0 评论 -
2015北京C(搜索技巧预处理)
链接:https://cn.vjudge.net/contest/250782#problem/C题意:给定2个字符串和2种操作,操作1是把一个数字变成另一个数字,操作2是把一种数字全部变成另一种数字,求把一个字符串比变成另一个字符串的最少操作次数(字符串均在1-6之间)这个技巧真的有些特殊。。显然需要用操作2来减少操作次数,而且应该是先用完操作2后在用操作1。。然后关键在看操作2。。...原创 2018-11-03 16:32:03 · 182 阅读 · 0 评论 -
hdu6326(贪心+并查集+优先队列)
题意:英雄在1节点(根节点),对每只怪,打他需要消耗a[i]HP,打完会获得b[i]HP,且这些怪会形成父子关系,即必须打完父亲才能打儿子,重复的怪不用再打,问打完所有怪所需要的最小HP跑得贼慢。。。感觉是少了一些基础。。所以只能照着题解做。。首先需要考虑没有父亲关系限制的情况。。那就是要求出一个打怪的顺序了。。考虑已经求出最优顺序,那么对2个相邻的怪来说,如果当前有t HP,那么...原创 2018-11-01 16:52:51 · 633 阅读 · 0 评论 -
bzoj1057(dp+悬线法)
这个是求矩阵的最大值,直接悬线法做就可以了。。。 /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃... ⌒ ... ┃ * ...原创 2018-10-19 16:47:43 · 141 阅读 · 0 评论 -
luogu4147(DP+单调栈)
这个是求不包含0的最大子矩阵的面积然后可以这么考虑,先用dp求出以每个点为右下角的最大的正方形,然后对每行扫过去,用单调栈维护,当每个元素出栈的时候,和他的最大正方形相同边长的元素必定出栈,那么此时就求以这个边长为宽的面积,然后长可以用最前面和他相同的元素的下标和当前下标求得。。 /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓...原创 2018-10-19 16:44:00 · 196 阅读 · 0 评论 -
luogu1387(DP+悬线法)
这个最近才接触到。。了解一下吧。。如果找不含0的最大子矩阵,这个子矩阵必然满足一个性质,就是这个子矩阵的边缘一定顶着0或者是边界,根据这个性质可以降低计数的复杂度,先预处理三个数组up和left和right,分别代表(i,j)往上拓展的长度,还有往左拓展的边界和往右拓展的边界然后在进行如下处理若(i,j)和(i,j-1)可以为合法子矩阵的元素left[i][j]=min(left[...原创 2018-10-19 01:24:38 · 142 阅读 · 0 评论 -
牛客练习(green博弈+bitset)
出这题算是比较用心了。。复习一下。。先考虑单链的情况,显然先手一定必胜,那么他的sg值要如何求呢?从0开始枚举,发现这条链可以通过黑白表示成二进制数,而只要小于这个二进制数的所有状态都能到达(相当于借了一位之后低位就能任取了),所以只要把链用二进制表示就行了。。然而这个sg值有点大啊,所以用bitset去存就很美滋滋。。然后考虑分叉,其实就是green博弈,直接异或即可。。终于有道...原创 2018-10-06 22:25:10 · 312 阅读 · 0 评论 -
牛客训练(BIT+高精度)
又是这类用BIT辅助计数的题。。这个显然满足要求的区间比不满足的要多太多,所以变成求不满足的。。。然后要先求总方案数,为这个不是很想在化了,反正O(n)求也可以的。。然后求不满足的。。这里已经有4个端点,如果再枚举端点什么的显然很不明智。。因此应该从区间的性质入手,所以要枚举最值。。枚举[l2,r2]的max,从大到小枚举,设此时的位置为i,可以发现,能构成区间2的个数有(...原创 2018-10-06 21:43:38 · 228 阅读 · 0 评论 -
cf411D(dfs/dp+离线+二分)
这个题确实比较综合,也非常巧妙。 。首先对每棵树,需要算出以每个点为根的最大深度d,这样连边的时候就能直接更新直径。。这个可以用2遍dfs上搞搞下搞搞就行。。主要维护前2大深度。。然后如果直接统计答案的话显然是不行的。。。但是如果和起来算有个问题是可能经过这条外加边形成的直径会比原直径小,那么先和起来算之后再关注比原直径小的情况。。很容易想到的一个做法是先对d排序,求前缀和,然后枚举其中一...原创 2018-10-04 01:24:54 · 227 阅读 · 0 评论 -
hdu6304(打表公式)
推了好久。。。这个题肯定是先把an打出来。。1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9发现从小到大出现,而且除了1,出现次数为二进制形式最低位的位数。。然后是求和。。既然和二进制有关,优先考虑n=2^k的情况。。发现an都是n/2。。然后就要考虑前n/2怎么推出n了。。1 2 2 3 4 4 45 6 6 7 8 8 8贴一下 2-8和9-15(因为...原创 2018-07-24 11:27:53 · 561 阅读 · 2 评论 -
cf983C(恶心状压DP)
虽然很讨厌这种题啦。。不过还是很常见的题目。。还得多练练才行。。。本来只想着只记录电梯内4人的目的地就行,因为搭载了第i个人那么位置肯定在a[i]。。这种思路上说不上错。。然而实现上需要分类讨论太多情况了。。所以弃了。。参考了ctl的做法。。将位置也考虑进状态中。。。状态变成电梯位置和4人的目标。。上面的思路主要出现在多人出去时次序的问题。。那么咱们就让人一个一个出去。。考虑到最多只能出去4个人。...原创 2018-05-19 00:36:53 · 652 阅读 · 0 评论 -
yandex资格赛C(dp->快速幂)
这场的bc都不太容易切啊 。。b的话还是考逻辑想象。。思维度没有。。然后这个c还是蛮有意思。。考虑一维情况很容易想到dp方程设扫到第i个数前缀和余数为j的方案为d[i][j]d[i][j]=sum(d[i-1][k]) k=0-n-1 =n*d[i-1][j]因为对上个余数k肯定能在1-n找到数使余数为 j。。所以余数为几基本都一样。。可以简化为:d[原创 2018-02-19 00:48:32 · 1138 阅读 · 0 评论 -
cf938d(建图技巧+最短路新模板)
这个题还是蛮好的。。充分反应了窝智商不够题又做得不多的事实。。。这个需要建图(网络流既视感。。),先把原图的边权值*2,建一个超级源点,连到各个点 ,权值为ai,然后跑最短路即可,每条从源点出发的路径可以看做一种反过来的方案。。。汪聚聚说看到多源最短路就要想到建图。。orz果然窝是经验不足。。之前以为建图是网络流特色。。其实图论应该都有这类操作,以后得好好学学。。。另外。。在c原创 2018-02-17 14:05:11 · 790 阅读 · 0 评论 -
cf934C(思维+前缀和)
看到题一直往贪心想。。感觉自己像个智障一样。。。思维性确实是有。。不过也没那么难想。。可能还是自己智商有限。。这题只有12,所以有必要知道2从哪里开始计数。然而麻烦的是这个计数点可能由于翻转会发生改变,所以有必要枚举翻转之后的计数点。。再考虑翻转区间,如果在计数点外的区间进行翻转显然是没什么意义的,所以翻转区间必然包含计数点。。这样计数点就将翻转区间分为2部分,对左边只需要求2的个数,原创 2018-02-16 14:56:07 · 385 阅读 · 0 评论 -
cf55D(数位DP+离散化+各种优化)
这个题比较不好弄。。首先要维护搜到当前的lcm,以及处理余数问题。。余数这个取谁的余比较好呢。。这个需要取1-9的lcm比较好,利用公倍数的性质,将余数状态强压到2520以内然后复杂度就变成了20*2520*2520了。。。还是会爆。。然后再来个离散化把1-9所有公倍数组合提取出来。。其实就是2520的因子。。实测有48个。。然后复杂度又降成了20*2520*48。。在记忆化搜原创 2018-01-31 16:13:53 · 648 阅读 · 0 评论 -
cf915F(神思维)
初看这题还以为可以链剖。。。和bzoj3626非常相似。。往这个方向想了一下发现可行性并不是很好。。因为要统计链上最小数而且如果有一样的最小数就麻烦了。。。然后看了下cyc的代码。。。只能深深的被其想法折服。。先找最大值。。按点权从小到大依次加进去,等到相邻的时候就可以统计了。。。语文不好请看代码。。。#include#include#include#原创 2018-01-16 00:30:40 · 1044 阅读 · 4 评论 -
bzoj 3611(链剖+前缀和)
来复习链剖吧。。以前一直认为链剖和线段树一定是标配。。其实以前学链剖的时候没有理解到位。。链剖可以说和dfs序是同一种手段,他们都是把树结构映射到数组上去的手段,因此链剖准确来说应该是一种算法而不是数据结构。这题是有关树上路径维护的,所以当然用链剖,一开始想用线段树维护(思维形成定势了?qaq),后来发现这题没有在线询问,所以我们完全可以离线处理 ,这样的话直接维护前缀和即可。。这题记得以原创 2018-01-06 20:17:33 · 213 阅读 · 0 评论 -
codeforce911F(树的直径)
emmmm这题思路有点奇特。。然后实现起来还有很多坑点。。比起那些思路一般实现困难的题更讨人喜欢→_→显然要先找出树的直径。。然后找出来后先处理直径以外的点。。最远距离肯定是和最远点的距离,然后删完之后直径就可以随便弄了。。。实现的过程有个坑点就是。。得从叶子往里删。。所以在删的时候要找到其中一个最远点的距离进行排序。。这样就能确保往里删了。。。然后还爆int。。代码由于推掉重写了几次原创 2017-12-29 23:10:33 · 197 阅读 · 0 评论 -
yandex资格赛e(tire+bit+离线处理+二分)
这个姿势有点特殊。。首先先把字符串变成数字再说。。用tire轻松解决。。。然后就是要在区间内查询是否m个数都存在了。。可以先离线处理,将之前出现过的相同的数字记下,枚举r,枚举的同时相同的数字只保留最后一个,因为区间右端已经确定,如果从右往左扫,之前的相同数字是起了重复作用,将这些数字标记为1的话就是转变为查询和为m的最小区间,直接二分即可。。由于是单点修改,区间和可用BIT维护。。原创 2018-02-19 18:43:57 · 567 阅读 · 0 评论 -
cf935f(线段树+思维)
首先题目主要关注|a[i]-a[i+1]|,所以很容易想到得先进行差分。。然后操作2就直接变成单点操作了,很舒服。。然后对操作1,主要要判断要在哪个点加x了。。貌似非常麻烦的样子。。然后参考了下q巨的解法。。竟然是构造分段函数。。。orz考虑到对某点+x只影响相邻的2个差值,所以可以运用分段函数处理+x后改变的值。。设差分后的数组为c(c[i]=a[i]-a[i-1]),改变点i,原创 2018-02-21 19:07:01 · 297 阅读 · 0 评论 -
luogu2754(并查集+枚举+网络流)
这个题数据小得有点诡异,所以尽量就往比较暴力的方向去想。。一开始有想到二分答案然后拆点建图跑最大流来check,后来发现其实并不用。。只要直接枚举答案即可。。从小到大枚举答案,对一个答案ans,把空间站拆成ans个点,表示每个时刻的空间站,然后根据飞船跑的顺序依次建边,直接跑最大流看是否大于承载人数。。。然后对于答案不存在的情况。。可以用并查集预判一下。。。/**原创 2018-05-05 09:59:59 · 149 阅读 · 0 评论 -
计蒜客某赛G(单调队列)
很明显选择从第一类边进去之后就只能走第二类边了,那问题就是选择哪个点作为中转点了。。对任意点i来说,d=0时的路径长度和边数都是确定的,那么可以确定路径和d的函数关系,事实上就是一次函数的关系了。。然后就是如何对每次询问,找到最小的函数值了。。汪聚告诉窝萌,这些函数可以在图上表示成若干直线,那么就可以维护一个上凸包了。。维护的具体方法就是,将这些直线依次加入单调队列,显然队列里面的原创 2018-04-24 20:00:13 · 233 阅读 · 0 评论 -
hdu5727(全排列+二分图)
orz多校题真的是rbq。。这个题也想到二分图了。。不过窝的建法没法保持项链是联通的。。所以gg。。然后正解是枚举出阴珠子的全排列,然后让空位和阳珠子进行匹配就完了。。仔细想想其实这题真的不难。。只是练得太少了qaq/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ *原创 2018-04-17 22:13:53 · 251 阅读 · 0 评论 -
长大校赛G(树的直径+图论)
看错题意以为这题不可做。。其实傻逼得很qaq距离和一定,要使访问的点最多,最显然的办法是走成一条链。。那么就要找离该点距离最大的点,而这个点显然是直径端点,为此需要先求出直径。。。然后距离和可能会比链长还要再长,即我们还可以访问更多的点,在这链的基础之上,每多访问一个点的代价是2(以链上一点向外延伸一个小分支,这个小分支还有来回,在这个分支的基础上再延伸也是2),那么把剩余的距离除以2就可以得出还...原创 2018-04-15 17:35:29 · 236 阅读 · 0 评论 -
bzoj1001(网络流+对偶图)
这道算是比较正宗的对偶图了。。题意很明显是求最小割,然后由最大流最小割定理又可以转化成最大流。。然而如果直接跑ispa明显会tle,10^6个点呢。。那最大流要怎么求呢。。这就是对偶图的一个经典应用了。。http://blog.sina.com.cn/s/blog_60707c0f01011fnn.html对偶图概念和在最大流上的应该这篇文章讲的还算蛮清楚,其实就是对偶图上的边代表了从哪阻断原图上...原创 2018-03-04 14:10:19 · 367 阅读 · 0 评论 -
wannafly交流赛1D(对偶图->最短路)
对偶图是什么我是不造啦。。大家都说看到阻断路线就得想到对偶图(怎么泥萌都会啊qaq然后很容易发现,阻断的方案应该是一条折线,或者说是一条路径,而且路径上的点权值要最小。。这样就可以转化成最短路求解了,从右边或上边到左边或下边,当然不一定是从右上到左下的,毕竟最短路可能会折回来一点啊。。然后最后需要注意的是这个要直接在原图上跑最短路,不然会tle。。后来去学了一下对偶图,其实也比较好原创 2018-03-04 14:02:40 · 199 阅读 · 0 评论 -
cf940e(优先队列/单调队列+dp)
这场可以说是相当水了。。然而一下涨了辣么多很高兴:)这题题意看了很久。。楞是看不懂(怀疑自己和外国人的思维有些脱节?)。。然后还是别人告诉的题意。。这题的话咋看无从下手,其实我们的目标就是要尽可能去掉多的数。一个数只能被整段区间去掉,而区间长度只能c的整数倍,因为再加上一两个元素没有作用,然后再想一下可以知道,如果2*c长度的区间分成2个长度为c的区间其实更合适,因为如果2个区间和并,原创 2018-02-24 22:09:54 · 587 阅读 · 0 评论 -
cf950D(数学)
emmmm一开始还以为是道挺难的题。。其实模拟一下很容易发现规律。。对空位i(i为偶数)进行讨论,那么如果下一个填的空位就是i的话,i之后的数列一定都被填满了,所以可以算出i之后有多少个数。。减去前面的数即i/2个,后面就剩下n-i/2了。。然后下一个填上来的肯定是位于数列最后一个,把当前位置加上去就得填充的是位于n+i/2的数了。。然后再看看n+i/2的数又是谁填充上去的就好了,直接递归。。原创 2018-03-09 21:15:02 · 719 阅读 · 0 评论 -
codeforce 899E(线段树/链表+优先队列)
这题做完之后整场比赛就AK了(虽然是赛后),感觉赛后得把题全做了比赛才会更有意义撒。。找最大重复序列并依次删除。。在汪聚聚的提醒下才发现其实用线段树就能实现啊。。orz维护的东西有点多,实现起来的难度比想象的要小很多,连pushdown都没有,果然CF是注重想法的。。update时考虑维护最长区间,能够产生最长区间的有三种情况 ,做子树的最长区间,右子树的最长区间以及左子树右端重复序列原创 2017-12-21 23:48:20 · 366 阅读 · 0 评论