10 2016 档案
摘要:Description 在 \([a,b]\) 之间选择 \(n\) 个数 (可以重复) ,使这 \(n\) 个数的最小公倍数能被 \(x\) 整除,对 \(10^9+7\) 取膜. \(1\leqslant n \leqslant 100,1\leqslant a,b,x \leqslant 10
阅读全文
摘要:Description 统计 \(1...n\) 的排列,恰好进行 \(k\) 次相邻交换和至多进行 \(k\) 次交换生成的不同的序列个数. Sol DP. 好妙的题啊... 首先看第一个问题. 对于相邻元素的交换,我们建立状态 \(f[i][j]\) 表示前 \(i\) 个数进行 \(j\) 次
阅读全文
摘要:Description 求一个最长周期. Sol KMP. 一个点的最短周期就是 \(i-next[i]\) 此外 \(i-next[next[i]],i-next[next[next[i]]]\) 等等都是它的周期,知道第一个为0的位置. 然后就没有然后了. Code
阅读全文
摘要:Description 一个字符串最短周期. Sol KMP. 最短周期就是 \(n-next[n]\) 证明: 当该字符串不存在周期的时候 \(next[n]=0\) 成立. 当存在周期的时候 \(next[]\) 表示的就是一个和当前后缀相等的前缀,由中间交错的位置可以分别推倒出相邻长度为 \(
阅读全文
摘要:Description 有两个字符串,每次用一个中取出下一位,放在一个字符串中,如果当前字符串的后缀是另一个字符串就删除. Sol KMP+栈. 用一个栈来维护新加的字符串就可以了.. 一开始我非常的naive,写了个链表,只能过5个点,因为起始位置不太好搞... Code
阅读全文
摘要:Description 同上题. Sol KMP+树状数组. 写这题的时候我灰常naive...不管了...直接贴代码... Code
阅读全文
摘要:Description 匹配字符串A,B,匹配条件是在A长度为=B的子串中,排名顺序相同. Sol KMP+树状数组. KMP匹配的时候计算排名就可以了啊...这个东西可以用树状数组维护. 这题是个双倍经验啊... 其实不用树状数组也可以,因为字符集很小,开个什么数组就可以搞,我就根据辣个题改了改而
阅读全文
摘要:Description 询问一个树上与两点距离相等的点的个数. Sol 倍增求LCA. 一棵树上距离两点相等,要么就只有两点的中点,要么就是与中点相连的所有点. 有些结论很容易证明,如果距离是偶数,那么他们没有中点,树上不存在距离两点相等的点. 如果中点恰好是两点LCA,那么答案就是\(n-size
阅读全文
摘要:Windows 开栈命令 Linux 开栈命令 Linux 永久开栈 在最后添加一句 Gedit 配置 自己闲的用Python写的对拍模板
阅读全文
摘要:Description 问选择一个序列上的所有数的最少操作次数,跟电脑上选择文件一样,输出操作方案. Sol 贪心. 用Shift一段文件只能使用一次,之后必须一直按Ctrl了. 然后就是看用Shift选哪段区间了. 如果选 \((l,r)\) 那么答案就是 \((C_{l-1})+(C_{n}-C
阅读全文
摘要:Description 给出一个图,求添加一条边使得添加后的图的桥(割边)最少. Sol Tarjan. 一遍Tarjan求割边. 我们发现连接的两个点一定是这两个点之间的路径上的桥最多,然后就可以贪心的搞. Tarjan的同时记录一下到该点的桥个数的最大值和次大值,然后统计答案就可以. 注意要满足
阅读全文
摘要:Description 给你一下长度为 \(n\) 的序列. \(a_i=a_j\) \(l_1 \leqslant i \leqslant r_1\) \(l_2 \leqslant i \leqslant r_2\) 询问满足条件的 \((i,j)\) 对数. Sol 分块+前缀和. 非常乱搞啊
阅读全文
摘要:Description 给出一个字符串,只包含3个字母,询问最长的一个子串,3个字母出现次数相同. Sol map. 如果一个子串满足条件,那么它端点处的三个字母的个数两两差值都是一样的,直接存个状态强行上map. 注意要加入一个初始状态. Code
阅读全文
摘要:Description \(n\) 个点, \(m\) 条边,边有权值和黑/白色,求含有 \(need\) 个白边的生成树. Sol 二分+Kruskal. 将每条白边都加上一个权值,然后跑最小生成树. 二分这个权值,显然随着权值的增加,白边个数减少,让权值尽可能大. 最后再减去权值即可. Code
阅读全文
摘要:Description 给你一堆块,每个块有颜色,每次可以消去相邻颜色块,并获得块大小平方的分数,求最高得分. Sol DP/记忆化搜索. \(f[i][j][k]\) 表示 \((i,j)\) 这个区间并且 \(j\) 后面有 \(k\) 个与它颜色相同的块,枚举断点,区间DP. Code
阅读全文
摘要:Decription 询问深度为 \(d\) 的 \(n\) 元树个数, \(n\) 元树所有节点的孩子都有 \(n\) 个. Sol 递推+高精度. \(f[i]\) 表示深度为 \(i\) 的 \(n\) 元树个数,我这里深度是从 \([1,k+1]\) 的... 转移就是从上方添加一个节点,子
阅读全文
摘要:随手写个2048全当练模拟了...上下左右,WASD都是可以的...你的操作会保存在 log.txt 中... 顺手贴代码.
阅读全文
摘要:Description [0,x]中全是1,其余全是0,每个点有一个权值,求最坏情况下得到x的最小权值. Sol DP+单调队列. 你可以去看我的这篇Blog...开这篇纯属为了骗访问... http://www.cnblogs.com/beiyuoi/p/5974574.html Code
阅读全文
摘要:Description [0,x]中全是1,其余全是0,每个点有一个权值,求最坏情况下得到x的最小权值. Sol DP+单调队列. 首先就是一个 \(O(n^3)\) 的DP. \(f[i][j]\) 表示x在 \(i,j\) 之间的最小权值. 转移就是 \(f[i][j]=min \{ max \
阅读全文
摘要:Description 求不跨过直线 \(y=x\) ,到达 \((n,m)\) 的方案数. Sol 组合数学+高精度. 这个推导过程跟 \(Catalan\) 数是一样的. 答案就是 \(C^{n+m}_n-C^{n+m}_{n+1}\) 自己随便化简一下就是 \(\frac {(n+m)!(n-
阅读全文
摘要:Description 有 \(6\) 种尺码的衣服,有的人只适合 \(1\) 种衣服,有的人适合相邻的 \(2\) 种,问是否存在合法方案,并输出. Sol 贪心. 首先,只适合 \(1\) 种衣服的直接减去就好了,如果个数小于 \(0\) 了直接不合法. 然后考虑适合两种衣服的.首先就是,可以跑
阅读全文
摘要:Description 求长度为 \(2n\) 的序列.要求 1. \(a_1<a_3<a_5<...<a_{2n-1}\) . 2. \(a_2<a_4<a_6<...<a_{2n}\) . 3. \(a_{2k-1}<a_{2k} ,1\leqslant k\leqslant n\) . Sol
阅读全文
摘要:Description 有 \(n\) 个点,每个点有一个入流和出流,每个点与编号比它大的点连边,容量为 \(c\) ,求最大流. Sol DP. 这种特殊的图可以DP,把最大流转化成最小割. 最小割就是 \(\sum s_i,i\in S + \sum p_j,j \in T + c \sum [
阅读全文
摘要:Description 求字符串的最小循环表示. Sol SAM. 把原串复制一遍,建出SAM,然后每次选最小的一个跑 \(len\) 次,这就是最小循环表示的最后一个节点,然后 \(x-len+1\) 即为答案. Code
阅读全文
摘要:Description 给出一串数字,求每次插入一个数字后本质不同的子串. Sol SAM. 在 SAM 上添加节点的时候统计一下 \(val[np]-val[par[np]]\) 就可以了... 用 map 存一下边,复杂度 \(O(nlogn)\) Code
阅读全文
摘要:Description 给出两个字符串,求最长公共子串. Sol SAM. 这题随便做啊...后缀数组/Hash+二分都可以. SAM就是模板啊...直接在SAM上跑就行,没有了 \(go[w]\) 就往 \(par\) 跳. 每走一步统计一下答案. Code
阅读全文
摘要:Description 一个无向图,每个节点有一个字符,问形成长度为k的的合法表达式的方案数. Sol DP. \(f[i][o][p][0/1]\) 表示走 \(i\) 步,到 \(o\) ,有 \(p\) 个左括号没有匹配,是否有前导 \(0\) . 分类讨论+大力转移就可以了. 判断好多啊..
阅读全文
摘要:Description 求 \(n\) 根木棍长度为 \(L\) ,分成 \(m\) 份,使最长长度最短,并求出方案数. Sol 二分+DP. 二分很简单啊,然后就是方案数的求法. 状态就是 \(f[i][j]\) 表示前 \(i\) 根木棍,分成 \(j\) 份的方案数. 然后就是转移,我们发现这
阅读全文
摘要:Description 给出一个树,每条边有边权,支持两种操作,询问 \(u,v\) 路径上边权最大值,修改第 \(i\) 条边的边权,\(n\leqslant 10^4,T\leqslant 10\) Sol 树链剖分. 基于边的树链剖分,对于一个点,可能有许多儿子,但是它只能有一个父亲,给它编号
阅读全文
摘要:Description 给你一个有向图,求至少询问多少次能够得到全部点的信息. Sol Tarjan + 强连通分量缩点 + 判断. 先缩点,如果我们知道了强连通分量里的任意一个点,我们就可以知道这些点的信息,和这些点所连接的其他点的信息,显然我们需要知道的就是缩点后入度为0的点. 然后还有最后一个
阅读全文
摘要:Description 一个有向图,求所以能被别的点到达的点的个数. Sol Tarjan + 强连通分量 + 缩点. 缩点以后找强连通分量,缩点,然后当图有且仅有1个出度为1的点时,有答案. Code
阅读全文
摘要:Description 给出一个无向图,求将他构造成双连通图所需加的最少边数. Sol Tarjan求割边+缩点. 求出割边,然后缩点. 将双连通分量缩成一个点,然后重建图,建出来的就是一棵树,因为每一条边都是桥. 然后每次合并这棵树上的叶节点两点距离LCA最远的点,这样就会形成一个环,是双连通的,
阅读全文
摘要:Description 一个连通的无向图,有些点有A属性,有些点有B属性,可以同时具有.删掉某条边后,如果使得连通块中一些点不具有A,B属性的点,求这些边. Sol Tarjan求割边. 首先这些边一定在割边上,然后统计分开的两个连通块中,是否使一边不具有A,B属性的点. 这个只需要DFS一遍,统计
阅读全文
摘要:Description 给你一个无向图,求删掉一个点及其连的边后,剩下的图是树结构,求这些点. Sol Tarjan求割点. 只需要求出割点,因为删掉的点只需要满足:不是割点(保证连通),边数位m-(n-2),即可. PS:Tarjan求割点的时候对于根要计算是他子树的点,而不是他的度数. Code
阅读全文

浙公网安备 33010602011771号