
好题集
Rayment_cc
++Rp
展开
-
BZOJ 2806 CTSC2012 熟悉的文章 cheat
ProblemBZOJSolution注意到答案具有单调性,不妨考虑二分答案。设f[i]表示询问串前i位能匹配的最大长度,那么我们容易写出如下dp方程,其中pi表示的是当前串能匹配的最大长度:fi=maxj∈[i−pi,i−L](fi−1,fj+i−j)fi=maxj∈[i−pi,i−L](fi−1,fj+i−j)f_i=\max_{j\in[i-p_i,i-L]}(f_{i-1}...原创 2018-08-24 14:57:36 · 317 阅读 · 0 评论 -
BZOJ4221 kangaroo
ProblemBZOJSolution想了一个下午不会做,然后发现有这么两篇题解,感觉思路好奇妙:clarispenth可以这样想,把袋鼠拆成两个点,上面是体积,下面是袋子,如果袋鼠a放到袋鼠b里去,则必须满足ax≤bya_x\leq b_yax≤by,即相当于在二分图上从上向下连线。那么其实这个就是要求最后局面中没有连线的mina>maxb\min a&...原创 2018-10-16 19:27:05 · 624 阅读 · 1 评论 -
51nod1462 树据结构
Problem51nodSolution第一想法是链剖+线段树好像可以做,只不过细节有点多。不过好像还可以cdq分治,但是cdq写起来还是不爽,得树剖+线段树,时间复杂度也并不优秀O(mlogmlogn2)O(m\log m\log n^2)O(mlogmlogn2)。我们考虑用线段树合并的方法来实现。由于每次操作都是从某点加到根,那么这个操作用线段树合并很好搞。考虑把线段树的的区间搞...原创 2018-10-16 20:02:33 · 273 阅读 · 0 评论 -
Codeforces958C3 Encryption (hard)
ProblemCodeforcesSolution是一道很有意思的题目。首先你可以写出一个最暴力的方程,设f[i][j]f[i][j]f[i][j]表示前j个位置分i段的最小代价f[i][j]=min(f[i−1][k]+(sum[j]−sum[k]) mod p)f[i][j]=\min (f[i-1][k]+(...原创 2018-10-22 18:37:54 · 401 阅读 · 0 评论 -
分糖果
Problem有一个n个元素的环,第i个元素的取值范围为[1,ai][1,a_i][1,ai],要求相邻的元素不能相等,问有多少种不同的赋值方法,答案对109+710^9+7109+7取模。n≤106,ai≤109n\leq 10^6,a_i\leq 10^9n≤106,ai≤109Solution考虑容斥。根据容斥的方程我们会发现可以直接考虑其奇偶性,设f[i][0/1]f[i][0...原创 2018-10-22 22:00:09 · 445 阅读 · 0 评论 -
洛谷4755 Beautiful Pair
Problem洛谷Solution考虑分治,对于区间[l,r][l,r][l,r],找出其最大值的位置pospospos,那么就需要在左右找出乘积不大于其的对数。怎么找呢,考虑建出主席树,然后扫一遍较短的区间,找一下小于某个值的有多少即可。为什么这样的复杂度不会被卡到O(n2)O(n^2)O(n2)呢,因为一次分治的复杂度和其区间长度无关,所以应该这样来分析,对于一个区间如果被扫,说明当前...原创 2018-10-30 09:13:05 · 225 阅读 · 0 评论 -
Codeforces452F Permutation
ProblemCodeforces给你一个长度为n(n≤3∗105)n(n\leq 3*10^5)n(n≤3∗105)的排列,问你存不存在i<j<ki<j<ki<j<k使得aj−ai=ak−aia_j-a_i=a_k-a_iaj−ai=ak−ai。Solution一道很有意思的题目。。我做的时候思路从fft到线段树...原创 2018-11-02 10:57:18 · 473 阅读 · 0 评论 -
BZOJ1492 货币兑换NOI2007
ProblemBZOJSolutionC[i]C[i]C[i]则表示第i天持有的最多的RMB,那么当天持有的最多的金券则分别可以用其表示C[i]=maxj=1i−1(A[j]∗ai+B[j]∗bi)C[i]=\max_{j=1}^{i-1} (A[j]*a_i+B[j]*b_i)C[i]=j=1maxi−1(A[j]∗ai+B[j]∗bi)将C[i]C[i]C[i]中的ai,bi...原创 2018-12-19 22:31:46 · 210 阅读 · 0 评论 -
FWT泛做
最近复习重新学习了一下FWT,然后做了一些乱七八糟的题目。。注:下文中的⊕\oplus⊕表示异或符号,∩\cap∩代表按位与,∪\cup∪代表按位或,带*标记的为好题集HDU5909 Tree CuttingHDU对于一个选择方案,我们仅在深度最小的那个节点上计算。设f[i][x]f[i][x]f[i][x]表示i号节点上,异或和为x的方案数。不难得到转移方程:f[u][i]=∑j⊕kf...原创 2018-12-14 17:02:10 · 393 阅读 · 0 评论 -
BZOJ 3206 APIO2013 道路费用
ProblemBZOJSolution注意到k只有20,那么对于这个图,很多点是由普通边连接的,那么我们可以先强制把所有的特殊边加入,然后把普通边做一次mst,则其他未加入的边肯定是不会做贡献的,把这些由普通边连起来的点缩在一起的,不妨称为新图。新图只有tot(tot≤k+1)tot(tot\leq k+1)tot(tot≤k+1)个点,但是由于特殊边的选择方案可能导致树的形态发生改变,所...原创 2018-10-18 08:24:16 · 261 阅读 · 0 评论 -
51nod1355 斐波那契的最小公倍数
Problem51nodSolution每次遇到这种神仙题,总有人告诉我这是出了很多遍套路题……Orz知乎大佬:https://www.zhihu.com/question/61218881/answer/185333391通过min-max容斥我们可以知道:lcm(fS)=∏T⊆Sgcd(fT)(−1)∣T∣−1=∏T⊆Sfgcd(fT)(−1)∣T∣−1lcm(f_S)=\pr...原创 2018-10-13 11:43:39 · 243 阅读 · 0 评论 -
POJ 2888 Magic Bracelet
ProblemPOJSolution由于有染色限制,那我们不方便直接用polya计数。不妨先从最朴素的DP考虑起,设f[i][j]表示染了前i个珠子,且第i个珠子的颜色为j的方案数,由于是环形的,你需要dp到n+1。为了避免重复计算,我们套用一下Burnside引理。不妨称旋转i个的置换称为置换i。考虑在置换i下,循环节数为gcd(n,i)gcd(n,i)gcd(n,i),那么我们...原创 2018-08-30 10:16:46 · 561 阅读 · 0 评论 -
LG-3731 HAOI2017 新型城市化
ProblemLuogu 不知道为什么好像没有在bzoj上找到这道题?Solution首先你要看出来,未联通的城市的最大独立集就是最大城市群。因为城市群是任意两两之间都有连边的,那么也就意味着在给出的图中,任意两两都没有连边,这就是独立集。那么问题就变成了,删掉哪些边可以使得最大独立集变大1,即最大流减小1。有一个这样的定理,关键边在最大流中必定满流且连接的两点在残量网络中并不在...原创 2018-09-09 16:11:33 · 244 阅读 · 0 评论 -
LOJ 2538 PKUWC2018 Slay the Spire
ProblemLOJSolution一道假的期望DP,其实就是考求和。。显然出牌顺序必然是先出强化牌,再出攻击牌。那么要怎么组织出多少牌呢。。如果是出k张牌,那么必然是出k-1张强化牌,再打出一张最大的攻击牌。因为至少强化一倍,即如果替换掉一张强化牌而搞成攻击牌,原本受到的伤害为A∗mxA∗mxA*mx,更改后变为Ak∗(mx+mx2)Ak∗(mx+mx2)\frac A k*...原创 2018-09-12 17:25:30 · 470 阅读 · 0 评论 -
概率计算器
Problem████[数据删除]Solution这道题研究的是连续型变量,那么为了描述它在各个数值的概率,我们可以用概率密度函数来描述。那啥是概率密度函数啊?看度娘给我们的解释:容易知道P(x≤A)=∫0AP(x)P(x\leq A)=\int_0^AP(x)P(x≤A)=∫0AP(x),那P(x≥A)P(x\geq A)P(x≥A)怎么办?看看度娘给的第二条性质,那么就有P(x≥...原创 2018-09-19 18:22:31 · 10037 阅读 · 0 评论 -
ARC084D Small Multiple
ProblemAtcoderSolution一道思路很巧妙的题目。在这个题目中,我们可以把题目转化一下,对于x,若+1不进位,那么可以用1的代价使它变为x+1,然后可以花费0的代价,使它变为x*10。那么我们怎么处理使得它是n的倍数的问题呢?把所有数字转化为模n下的值即可。由于边权为0或1,用01BFS可把时间复杂度优化至O(n)O(n)O(n)。Code#include <cs...原创 2018-09-25 14:27:08 · 439 阅读 · 0 评论 -
BZOJ 3925 ZJOI2015 地震后的幻想乡
ProblemBZOJ每条边都有一个[0,1]边权,求最小生成树中最大边的期望大小n个[0,1]的随机变量,第k小的期望是kn+1\frac k {n+1}n+1kSolution姑且不论为啥第k小的期望是kn+1\frac k {n+1}n+1k,那是题目中给的信息……我也不会证qwqqqMST上的最大边就是在kruskal的时候最后加入的边,那么就要求加到第i条边时联通的概率,...原创 2018-10-01 22:24:56 · 316 阅读 · 0 评论 -
Codeforces 939F Cutlet
ProblemCodeForces大意就是一个长度为2n的01序列,给定k个不相交的区间,在区间内的元素允许与前一个元素不同,代价为1,要求使得01序列中0和1恰好是n个,问最小的代价。Solution可以设出这样的一个dp,f[i][j]表示到第i段结束,当前没烤的这面烤j分钟的最小翻面次数。如果你觉得这个状态不那么方便你也可以加一维0/1咯。有这么一个性质,在一段区间内只有不翻/翻1...原创 2018-10-02 18:08:22 · 337 阅读 · 0 评论 -
ARC102D All Your Paths are Different Lengths
ProblemAtCoder给定L,要你构造一张有向带权图,只允许从编号小的指向编号大的,允许两点间有多条边。使得图中从1号点到n号点恰有L条不同的路径,且路径长度分别为0,1,2,⋯ ,L−10,1,2,\cdots,L-10,1,2,⋯,L−1。图的点数必须小于等于20,边数小于等于60。Solution这是一道比较有意思的构造题。我们可以考虑这样构造图,...原创 2018-09-21 08:24:34 · 352 阅读 · 0 评论 -
一个简单的区间问题
Problem徐寅展论文里的题Solution为了叙述方便,不妨称题目中初始给出的赋值操作为第一类操作,赋值操作因为会直接覆盖前面操作的贡献,所以有一定的时间作用区间,那么按时间作用区间处理后得到新的操作,不妨称之为第二类操作。考虑用线段树先模拟一遍,一个标记会把原来在它子树中的操作无效化,记得下推标记时要把标记分裂。但是这样的操作数就达到了O(mlogn)O(m\log n)O(mlo...原创 2018-12-21 22:44:39 · 398 阅读 · 0 评论 -
ARC101E Ribbons on Tree
ProblemAtCoderSolution发现ARC也有挺多比较有意思的题目……直接统计是很麻烦的,所以我们不妨考虑容斥。如果有F(S)F(S)F(S)表示SSS集合中的边未被覆盖的答案,那么用一下子集容斥就做完了。考虑f[x][i]f[x][i]f[x][i]表示x子树内有i个点未匹配的方案数,我们会发现当且仅当i=0i=0i=0时,x的父边是没有被覆盖的,根据子集反演会给我们带来-...原创 2018-12-18 19:56:15 · 394 阅读 · 0 评论 -
BZOJ 3171 TJOI2013循环格
ProblemBZOJSolution很有意思的一道题目先讲讲怎么建图:把每个格子拆成入点uxu_xux和出点vxv_xvx,对于每个格子的入点依次向四周格子的出点连边,方向和给定方向一样则费用为0,否则费用为1。源点向入点连流量为1,费用为0的边,出点向汇点连流量为1,费用为0的边。那么我们就想要证明每个最大匹配都对应一个完美格子。其实证明并不难,对于最大匹配下,如果uxu_x...原创 2018-12-25 20:34:52 · 267 阅读 · 0 评论 -
UOJ356 JOI2017春季合宿 Port Facility
ProblemUOJSolution这题和POI的Railway感觉好像,虽然最终做法并不一样。。由于代码稍微有点难写,这里就先口胡一个解法吧当两个线段相交时它们不能放在同一个栈中,判定能否二分图染色,然后计算联通块个数 tottottot,则答案就是 2tot2^{tot}2tot。我们可以沿用Railway的思路,先搞出一棵生成树,二分图染色后模拟判定是否合法。对于一个点,它对应两...原创 2019-03-13 22:08:56 · 525 阅读 · 0 评论 -
BZOJ5259 CERC2017 Intrinsic Interval
ProblemBZOJSolution队长:这不是WC上讲的析合树吗?我(懵逼):……?有一个性质,如果有两个连续区间交叉了,那么它们的交集一定也是连续区间。因为如果它不是,那么中间一定是缺了一个元素,而这两个区间不可能同时拥有这个缺少的元素。那么对于一个询问,包含它的最短的连续区间,必然是从询问的 rrr 端点开始,能包含且 lll 最大的区间。直接做有点无从下手,把连续区间的定...原创 2019-03-17 21:03:43 · 347 阅读 · 0 评论 -
UOJ223 NOI2016 国王饮水记
ProblemUOJSolution经过 瞎猜 思考可以得到以下性质:所有高度小于首都的水箱肯定不会参与联通。选择联通的水箱必然是从某一个水箱开始的连续的知道选到最高的水箱。因为如果中间有间隔,那么完全可以把前面的水箱舍弃掉最小的,然后换成间隔的较大的。如果要联通多次水箱,必然是先与相对较低的水箱联通,再与相对较高的水箱联通。否则交换顺序更优,可以推推式子证明。kkk 最大取 n−...原创 2019-03-22 18:48:44 · 428 阅读 · 0 评论 -
Codeforces526G Spiders Evil Plan
ProblemCodeforcesSolution我们可以先考虑怎么解决单组询问。可以把 xxx 提做根,然后每次贪心选贡献最大的叶子即可。注意到叶子被选作的贡献是可以确定的,因为选叶子的顺序是固定的,而这个恰好对应这这棵树的长链剖分,选某个叶子的贡献就是它的长链的长度。那么我们就得到了一个优秀的 O(n2logn+m)O(n^2\log n+m)O(n2logn+m) 算法啦!这个算法...原创 2019-03-26 17:19:05 · 453 阅读 · 3 评论 -
UOJ394 NOI2018 冒泡排序
ProblemUOJSolution对于排列中的一个数,如果它前面有 kkk 个大于它的数,那么它一定会向前走 kkk 步,而这每一步都不能浪费才能达到下界,因此一个数的前面要么全都比它小,要么所有比它小的数都出现了在它的前面。然后画画图,发现这其实等价于序列的最长下降子序列长度不超过2。这样我们就可以设 f[i][j]f[i][j]f[i][j] 表示前 iii 个数最大值为 jjj 的...原创 2019-05-05 13:58:06 · 287 阅读 · 0 评论 -
BZOJ5381 HNOI2018省队集训 OR
ProblemBZOJ竟然是HN省队集训的题,出题人还贴心地把模数改成了998244353998244353998244353,好感动,我还以为HN省队集训都是一堆毒瘤出自己都不会/想做的题。原题应该是这个,只不过原题要MTT:Codeforces623E Transforming SequenceSolution首先 nnn 的范围是假的,因为要严格递增,每次 bib_ibi 至少会...原创 2019-05-20 22:25:18 · 554 阅读 · 0 评论 -
UOJ295 ZJOI2017 线段树
ProblemUOJSolution问题的关键在于如何定位广义线段树上的一段区间 [l,r][l,r][l,r] 所对应的节点,可以考虑zkw线段树的方法,先找到 l−1l-1l−1 和 r+1r+1r+1 所对应的节点,并且向上跳直到它们的lca处,l−1l-1l−1 祖先的所有右儿子以及 r−1r-1r−1 祖先的所有左儿子都是对应的节点。需要注意的是为了提取 l=1l=1l=1 或 r...原创 2019-06-19 13:01:10 · 298 阅读 · 0 评论 -
UOJ408 IOI2018 机械娃娃
ProblemUOJSolutionIOI的题很适合按subtask做先考虑子任务3,对于每个触发器后面接的触发器,如果有4个,可以设计一个完全二叉树的结构,如果仅有3个只需要把XX这条边指向自己即可。这样构造出的开关不会超过 NNN。再考虑子任务4,N是2的整数次幂。不难发现子任务3的方法浪费了很多开关,不妨尝试对整个序列构建完全二叉树结构,可以把同一层的深度的点向X走视作0,向Y走...原创 2019-06-17 13:31:40 · 322 阅读 · 0 评论 -
Atcoder Code Festvial 2017 Final J Tree MST
ProblemAtcoder给你一棵 nnn 个节点的树,每个点有权值 w[i]w[i]w[i] ,边带权。现构建一张完全图,对于任意一对点 (x,y)(x, y)(x,y) ,有一条长度为 w[x]+w[y]+dis(x,y)w[x] + w[y]+ dis(x, y)w[x]+w[y]+dis(x,y) 的边。求这张图的最小生成树。话说Code Festival在官网上咋进啊?qwqq...原创 2019-03-03 21:26:39 · 439 阅读 · 0 评论 -
BZOJ3515 Evenpaths
ProblemBZOJSolution看到数据范围,考虑折半搜索。按照拓扑序,把关键点集平分为左右两边来考虑。如果我们dp出0到点x的路径条数 pxp_xpx,点x到1的路径条数 sxs_xsx,那么被这个点计数的路径条数显然是 px×sxp_x\times s_xpx×sx。对于一条路径,我们用第一次经过的右半边的关键点(可能没有障碍)来计数,因此顺便把1号点也设为关键点。这样 ...原创 2019-02-19 22:45:11 · 418 阅读 · 0 评论 -
洛谷5156 Sort It Out
Problem洛谷Solution充分必要条件就是未被选择的数是单调上升的,要求最少,则需要求LIS。而被选择的字典序第k小也就对应着被选择的字典序第k大。那么我们考虑从高位到低位确定下来每一个数字,由此我们需要求出选了某个数之后的后继LIS方案数,用树状数组优化dp解决。然后我们就按顺序丢进vector里即可,注意其实这里vector内部是不需要排序的,因为我们是从前往后扫的,若同样长...原创 2019-01-10 21:49:08 · 311 阅读 · 0 评论 -
Codeforces 526F Pudding Monsters
ProblemCodeforcesSolution发现有些题目把情况分类讨论就可以使题目好处理很多。注意到每行每列都只有一个怪物,那么我们可以将其转化到一维的情况,则可以得到一个排列,那么问题就变为了,统计有多少个子区间[L,R][L,R][L,R]满足mx−mn=R−Lmx-mn=R-Lmx−mn=R−L。好像很不好处理…考虑跨越中点的区间,分类讨论一下mxmxmx和mnmnmn的分布...原创 2019-01-02 08:05:41 · 530 阅读 · 0 评论 -
UOJ395 NOI2018你的名字
ProblemUOJ给定一个S串,有m组询问,每次给定一个T串,询问T串有多少个本质不同的子串没有在S串的区间[L,R][L,R][L,R]中出现过。Solution看到涉及到子串的题我们就得把S串的SAM乖乖建好,看到本质不同,我们就还得把T串的SAM乖乖建好。从统计本质不同子串的原理出发,我们只需要减去不合法的子串即可。一个比较显然的想法是,我们用T串去匹配[L,R][L,R][L,...原创 2019-01-13 19:07:50 · 412 阅读 · 0 评论 -
UOJ348 WC2018 州区划分
ProblemUOJSolution做的时候SB了,纠结了好久怎么判定欧拉回路,YY了半天状压DP无果,后来突然想起欧拉回路的充要条件是联通且点的度数为偶数。设h[s]=∑x∈swxh[s]=\sum_{x\in s} w_xh[s]=∑x∈swx,如果sss是合法的那么g[s]=h[s]g[s]=h[s]g[s]=h[s],否则g[s]=0g[s]=0g[s]=0那么枚举最后的划分...原创 2019-01-24 11:31:35 · 276 阅读 · 0 评论 -
BZOJ 5092 分割序列
ProblemBZOJSolutionf(b,n)=maxi=0n((b1⊕b2⊕...⊕bi)+(bi+1⊕bi+2⊕...⊕bn))f(b,n)=\max_{i=0}^n((b_1 \oplus b_2 \oplus...\oplus b_i)+(b_{i+1} \oplus b_{i+2} \oplus...\oplus b_n))f(b,n)=i=0maxn((b1⊕b2⊕...原创 2018-12-15 16:13:41 · 264 阅读 · 0 评论 -
洛谷5155 Balance Beam
Problem洛谷Solution很有意思的一道题目。对于一个在[1,n][1,n][1,n]上的点,我们有两种决策,跳下去或者继续走,我们考虑一下继续走的最大期望收益。先说一个性质。对于当前位置ppp,我们可以枚举在前后选定的结束点l,rl,rl,r,设fif_ifi表示i走到结束点的期望收益,不难得到这样的一个方程fi=12fi−1+fi+1f_i=\frac 1 2 f_{i-1...原创 2019-01-09 22:37:01 · 259 阅读 · 0 评论 -
UOJ269 如何优雅地求和
ProblemUOJ给定 n,pn,pn,p , f(x)f(x)f(x)是一个 mmm 阶函数,求(1)Q(f)=∑k=0nf(k)(nk)pk(1−p)n−kQ(f)=\sum_{k=0}^n f(k)\binom n k p^k (1-p)^{n-k}\tag1Q(f)=k=0∑nf(k)(kn)pk(1−p)n−k(1)Solution首先(n−m)=0\binom {n} ...原创 2019-01-30 09:05:42 · 1157 阅读 · 0 评论 -
Codefoces802O April Fools' Problem (hard)
ProblemCodeforcesSolution这鬼题为什么一脸可以DP的样子?可怜我D了半天都没列出方程队长:这不是显然费用流吗?惨遭嘲讽队长:我就看了一会从费用流模型入手,那么就是就是把A点,向每一个后面的B点连边,这样边是O(n2)O(n^2)O(n2)级别的。然而其实可以优化这些边,把每个B点都向后连INF,费用为0的边即可。边数变为了O(n)O(n)O(n)的。然后费...原创 2019-02-23 17:09:53 · 489 阅读 · 1 评论