随笔分类 - a经典做法
摘要:5329: [Sdoi2018]战略游戏 链接 分析: 建出圆方树,那么求的就是点集中所有点的构成的联通块的圆点的个数,然后转化为路径和+[根节点为圆点]。 按照dfs序排序,然后答案等于相邻两个点之间的路径和,除以2。 代码: #include<cstdio> #include<algorithm
阅读全文
摘要:3689: 异或之 链接 分析: 01trie+堆。 首先考虑如何去一个数与其它数异或后的第k大,建出01trie,然后在trie上走,如果可以往小的边走,就往小的边走,否则往大的边。每个点记录下size,有多少个数。 查询一下每个数异或后最小的数,加入到堆中,不断删除最小的,加入与它异或下一小的。
阅读全文
摘要:P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1)}{2} $,表示新增加一个叶子结点,深度增加2,加权后取平均值。 第二问:f[i][j]表示有i个
阅读全文
摘要:4358: permu 链接 分析: 不删除的莫队+可撤销的并查集。 每次询问先固定左端点到一个块内,然后将这些右端点从小到大排序,然后询问的过程中,右端点不断往右走,左端点可能会撤销,但是移动区间不超过$\sqrt n$个,用带撤销的并查集维护。 复杂度$O(n \sqrt n log n)$ 代
阅读全文
摘要:#6074. 「2017 山东一轮集训 Day6」子序列 #6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j。于是有转移方程: $$ f_{i,j}=
阅读全文
摘要:双面间谍 链接 分析: 戳这 代码: #include<cstdio> #include<algorithm> #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<set> #include<q
阅读全文
摘要:D. Broken robot 链接、 题意: 一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动。如果在左右边缘上,那么等价的概率不动,向右/左,向下。走到最后一行即结束。求期望结束的步数。 分析: 因为不能往上走,所以行与行之间存在转移,即上一行转移到下一行。 同一行内的位置可以互相转
阅读全文
摘要:4556: [Tjoi2016&Heoi2016]字符串 链接 分析: 首先可以二分这个长度。此时需要判断是否存在一个以b结尾的前缀,满足与[c,d]的lcp大于等于mid。 如果我们把串翻转,那么就是判断是否存在一个以b开始的后缀,这样可以建出SAM,线段树维护每个点的right集合。此时在从包含
阅读全文
摘要:4552: [Tjoi2016&Heoi2016]排序 链接 分析: 因为只询问一次,所以考虑二分这个数。显然是没有单调性的,但是我们可以二分所有大于等于mid的数中,是否有满足条件的x(而不是之间判断mid是否满足条件)。 那么将大于等于mid的数设为1,小于mid的数设为0,此时对区间排序就变得
阅读全文
摘要:3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp。数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点。 代码:
阅读全文
摘要:E. Vasya and Binary String 链接 分析: 对于长度为x的一段序列,我们可以dp出消除的过程的最优方案,背包即可。 然后区间dp,可以先合并完所有的点,即没相同的一段区间合并为一个点。设f[i][j][k]表示消完区间[i,j]和这段区间后面k个元素最大值,其中k个元素的颜色
阅读全文
摘要:3992: [SDOI2015]序列统计 链接 分析: 给定一个集和s,求多少个长度为n的序列,满足序列中每个数都属于s,并且所有数的乘积模m等于x。 设$f=\sum\limits_{i=0}^{n - 1} a_i x ^ i \ \ 如果集合中存在i,a_i = 1$ 那么答案的生成函数为f自
阅读全文
摘要:4025: 二分图 链接 分析: 线段树分治+并查集。 以时间为下标建立一颗线段树,对于每条边u,v,l,r,在期出现的时间[l,r]的时间上打标记,表示时间[l,r]存在这条边,那么在线段树上递归到叶子结点,就是每个时刻所有出现的边。 从根节点出发,把所有的边加入,并查集维护是否合法,如果到叶子结
阅读全文
摘要:4569: [Scoi2016]萌萌哒 链接 分析: 每次给出的两个区间长度是一样的,对应位置的数字也是一样的,那么可以将两两对应的数字用并查集合并,设最后有$cnt$个不同的集合,答案就是$9\times 10 ^{cnt-1}$,第一个数不能是0。 暴力合并太慢了,考虑优化。对于一段区间,用倍增
阅读全文
摘要:1797: [Ahoi2009]Mincut 最小割 链接 分析: 题意为:问一条边是否可能存在于最小割中,是否一定存在于最小割中。 首先最小割的边一定是满流的边。且这条边点两个端点u.v中,至少一个与S或T联通。而且在残量网络中u->v没有增广路。如果存在增广路,那么会使最小割的增加。这条增广路会
阅读全文
摘要:4537: [Hnoi2016]最小公倍数 链接 题意: 一张无向图,每条边有两个权值(a,b),多次询问是否存在一条从x到y的路径,使得路径上的最大值a和最大的b是给定的,路径可以不是简单路径。 分析: 考虑一次询问如何做,可以将所有小于等于a并且小于等b的边加入,并查集维护每个联通块的最大的a和
阅读全文
摘要:4542: [Hnoi2016]大数 链接 分析: 如果p等于2或者5,可以根据最后一位直接知道是不是p的倍数,所以直接记录一个前缀和即可。 如果p不是2或者5,那么一个区间是p的倍数,当且仅当$\frac{b[l] - b[r + 1]}{10 ^ {r - l + 1}} = 0 \ (mod
阅读全文
摘要:3235: [Ahoi2013]好方的蛇 链接 分析: 可以求出以每个点为顶点的满足条件的矩形有多少个,单调栈求。设为sum。 然后对这个数组进行二维前缀和,可以求出每个矩阵内,以右下角、左下角为端点的矩形有多少个,分别设为f,g。 然后可以枚举一个点(x,y),计算有多少个矩形的左上角是这个点,然
阅读全文
摘要:P5231 [JSOI2012]玄武密码 链接 分析: 首先对所有询问串建立AC自动机,然后扫描一遍母串,在AC自动机上走,没走到一个点,标记这个点走过了,并且它的fail树上的祖先节点也可以访问到(即可以匹配到主串),于是沿着fail树打标记,当到一个已经打过标记的点的时候,退出。这样保证每个点只
阅读全文
摘要:2734: [HNOI2012]集合选数 链接 分析: 转化一下题意。 1 3 9 27... 2 6 18 54... 4 12 36 108... 8 24 72 216... ... 写成这样的矩阵阵后,那么题意就是不能选相邻的点,求方案数。可以知道行不超过18,列不超过11,然后状压dp即可
阅读全文

浙公网安备 33010602011771号