2023年 7月 做题记录
乐,7.9 才开始写.
LOJ #6507. 「雅礼集训 2018 Day7」A
考场做法
按位考虑.
对于 \(&\) 操作,为 \(1\) 的位不需要考虑.对于为 \(0\) 的位,则是 \([l,r]\) 的这一位覆盖为 \(0\).\(|\) 操作同理.
因为是某一位的覆盖,不能方便地维护全局的最小值.
考虑将覆盖操作换成加减操作.
对于任意一位:遍历 \([l,r]\),若干极长的 \(0/1\) 段可以一起操作(加,减或不变),操作之后区间被统一成 \(1\) 或 \(0\).我们发现复杂度是颜色段覆盖.
正解
不用按位考虑了.
考虑维护区间的 \(|\) 和 \(S_{or}\) 和 \(\&\) 和 \(S_{and}\).
- 对于一个区间,只有 \(S_{or}\) 和 \(S_{and}\) 进行操作后相等,才能保证区间中的每个数进行操作后相等.
- 对于一个区间 \(|d\),若 \(s_{and}|d=s_{or}|d\),则区间 \(|d\) 无效.
- 对于一个区间 \(\&d\),若 \(s_{and}\&d=s_{or}\&d\),则区间 \(\&d\) 无效.
根据势能分析可以知道算法复杂度正确.
但我不会势能分析.
LOJ #6508. 「雅礼集训 2018 Day7」B
奇妙的转化.
考虑枚举 \(T_i\),然后看它能贡献到以哪些地方为起点的询问上.
考虑起点是 \(p\).
若 \(T_i=1\):
若 \(T_i=0\):
\(T_i\) 有贡献的起点 \(p\),\(S_p\) 是剩余类上一个连续区间.
整一个动态开点值域线段数即可.
LOJ #6509. 「雅礼集训 2018 Day7」C
很强的随机性伴随的对称性.
考虑转化贡献.
发现一个点被选择后,若没有到终止局面,肯定会进行下一次选择:产生的移动距离期望是
那么我们只需要求出每个点不导致终止局面的期望被选择次数即可.
由于纯随机,发现树的形态不会对选择次数产生影响.
考虑设计状态 \(F_{i,0/1}\) 表示存在 \(i\) 个黑点,其中任意一个 黑/白 点不导致终止局面的期望被选择次数.
有转移方程
笔者尝试实现暴力高斯消元.但答案一直不对.
这里附上一篇不错的题解 20200525 hz T3(#6509. 「雅礼集训 2018 Day7」C)【期望】
P7831 [CCO2021] Travelling Merchant
考虑如下算法流程:
(1) 对于图中没有出度的(在队列中)点,更新指向它们的点并将指向它们的边删除,将这些点压入队列.如果产生了新的没有度数的点,则重复该流程.
(2) 选出没有被删除的 \(r\) 最大的边,假设它是 \(e(u \rightarrow v,r,p)\).用 \(r\) 更新 \(u\) 的答案.若 \(u\) 没有出度,将 \(u\) 压入队列.
(3)重复上面两步操作,直到所有边被删除.
以上算法的时间复杂度瓶颈在给边按 \(r\) 降序排序.
考虑算法的正确性.
显然从 \(u\) 出发,要保证无限游走必须要走到一个环上.
算法每次将可能在环上的最大边断掉(2),然后使用类似拓扑排序的方法更新可能在这个环上的点的答案(1).
分两类:
- 若环上 \(r\) 最大的边在从 \(u\) 指出的边上.算法步骤(2)可以更新.
- 若环上 \(r\) 最大的边不是从 \(u\) 指出的边上.算法步骤(1)可以更新.
LOJ #6065. 「2017 山东一轮集训 Day3」第一题
分类枚举.
记 \(num(len)\) 表示长度为 \(len\) 的木棍的个数.
- 两条长度为边长的木棍 \(+\) 四条小木棍.先枚举边长,然后枚举四条木棍.答案为
这里的 \(w(len)\) 表示用四条木棍组成两条长为 \(len\) 的边的方案数量.这个方案是容易讨论的.
2. 三条长度为边长的木棍 \(+\) 三条小木棍.这时不能先枚举边长(处理会变得很麻烦).存在两根小木棒相同或三根小木棒都相同的情况是容易解决的.考虑三根小木棒均不同如何统计.枚举三条小木棍中最长的一个.从大到小扫描每种长度的木棍.记 \(F_{i,j}\) 表示长度 \(\le i\) 的两根木棍拼起来,大小等于 \(j\) 的方案数.新加入长度为 \(i\) 的小木棍后,\(F\) 存在变化 \(F_{i,i+j}+=num(i)*num(j)\).然后这时,我们再枚举边长 \(d\),由于规定了最长的小木棍为 \(i\),则对方案的贡献为
LOJ #6119. 「2017 山东二轮集训 Day7」国王
记 \(x\) 表示 \(u \in [l,r]\),记 \(y\) 表示 \(u \notin [l,r]\).
那么一个区间 \([l,r]\) 合法即判定
考虑在不等式左边加上
右边加上
显然这两个部分是相等的.
那么原来的判定式可以改写成:
即
记 \(\displaystyle w_i=\sum_{(i,*)}[(i,*)\ is\ a\ correct\ path]\),求出所有 \(w_i\) 后双指针即可.
P4001 [ICPC-Beijing 2006] 狼抓兔子
平面图转对偶图,最短路即可.
平面图和对偶图,详见 基础图论算法.
LOJ #6138. 「2017 山东三轮集训 Day4」Right
暴力打表 SG 函数可以得到
首先对于 \(P\) 是奇数的情况是非常好处理的.只需要支持 \(01\) 区间取反,区间异或和即可.可以用线段树实现.
若 \(P\) 为偶数,考虑分块.块内记 \(M[0],M[1]\) 分别表示偶数和奇数的值的集合(不包含加法标记).并记整块加法标记 \(Tag\).修改是容易的.
查询考虑分类讨论,将同余于 \(P\) 的值单独拉出来.
LOJ #6511. 「雅礼集训 2018 Day8」B
线性规划对偶.
现在有一个竖向量 \(x\),两个横向量 \(a,c\) 和一个矩阵 \(B\).
在满足 \(B\times x \le a\) 的前提下最大化 \(ans=c\times x\).
构造一横向量 \(y\).在满足 \(y \times B\ge c\) 的情况下最小化 \(ans'=y\times a\).
有 \(ans=ans'\).
显然,对称的转换也是对的.
用处:
- 将最小化的线性规划转化成标准(最大化的)线性规划问题,方便单纯形求解.
- 转换问题,方便网络流求解.
在这种应用情景中,必须保证对偶后的问题存在较好的性质,使用网络流求解是容易的.
然后回到这一题.首先二分一个答案 \(\\lambda\).然后判定是一个线性规划问题.对偶写起来比较复杂.最终可以抽象成这样一个问题:
在 DAG 中选出若干路径,一条路径的收益是 \(路径长度-\lambda\).每条边被选择一定次数后没选择一次就会扣除一次收益.最大化收益的和.
可以使用最大费用可行流.
4034: 7.21 t4 盐雪沙痕
翻译题意:定义一个括号序列的权值是其合法括号子序列的最大嵌套深度.现在给定一个序列存在若干位 \(*\):等概率为左括号或右括号.询问其权值的期望.
首先它可以变成一个计数问题.
需要思考对于一个固定的括号序列,我们如何统计答案.我认为这是组合计数题的一种思考方向:建立一种 方案 \(\rightarrow\) 贡献 的统计方式.对于任意一种括号序列,其嵌套深度最深的合法子序列可能存在很多种:我们需要采用一种固定的选取方案——这样对我们统计答案肯定是有帮助的.
我们可以贪心地选择左右若干对不交的匹配括号.匹配对数即为最深的嵌套深度.正确性显然.
然后我们再使用另一种技巧:拆贡献!考虑对于每一个左括号或 \(*\)(选择成为左括号),它在几种方案中会被统计入贡献.
对于一个是左括号或 \(*\) 位置,设前面的左括号个数是 \(a\),\(*\) 个数是 \(b\),后面的右括号个数是 \(c\),\(*\) 个数是 \(d\).有其被贡献次数为等于
然后预处理组合前缀和即可.

浙公网安备 33010602011771号