2023.4-2023.5 水题记录
摆烂了属于是.
1. P4071 [SDOI2016]排列计数
错排板子, 显然答案为 \(\dbinom{n}{m}D_{n-m}\), \(D_k\)m 为错排数.
2. P5104 红包发红包
连续型随机变量入门题. 本人不太熟练, 写一下过程.
根据题中条件, 抽到钱数在 \([0,x](x\in[0,w])\) 间的概率为 \(\dfrac{x}{w}\). 求导得概率密度函数
故抽一次得到钱数的期望为
抽第 \(k\) 次时, 枚举第一次抽到的钱数 \(x\), 并且根据抽 \(k-1\) 次即 \(E_{k-1}(w)\) 的结果, 有
数学归纳易证 \(E_k(w)=\dfrac{w}{2^k}\).
3. CF1333E Road to 1600
这题是怎么紫的?
显然 \(n=2\) 不可能; 对 \(n=3\) 我们可以构造:
大概思路是把后绕到最后一步需要马步, 然后试着让车能一次走完.
对于更大的 \(n\) 就简单了, 直接在外面绕圈就行了.
4. CF717E Paint it really, really dark gray
实际上很简单. 直接 dfs 就行, 如果当前点颜色不正确就和父亲结点反复横跳一下 (对于根结点就是随便找一个子结点跳来跳去, 反正路径不要求在根结点结束)
5. CF1534D Lost Tree
这种东西应该是套路题, 但是我没见过.
首先钦定 \(1\) 为根询问一下, 按照深度奇偶将点分为两部分.
然后实际上距离这个条件就没啥用了. 我们取两部分中更小的一部分, 直接找出来和它们直接相连的点就能还原整棵树的形态.
6. CF938E Max History
数数题.
发现这是个严格递增的爬坡求和 (不算最后一个元素), 我们考虑每个元素的贡献.
我们数出来严格比 \(a_p\) 小的数的数量 \(k_p\), 枚举 \(a_p\) 前放的数的数量有
化简式子作为练习, 最后算出来得 \(\dfrac{n!}{n-k_p}\), 求和即可.
7. P5752 [NOI1999] 棋盘分割
众所周知方差=平方的平均数-平均数的平方, 均方差再开根号.
只需要让平方的平均数最小. 这个可以枚举切割线无脑 dp 掉.
(具体状态转移如下)
inline int s(int xa,int ya,int xb,int yb)
{
return sum[xb][yb]-sum[xb][ya-1]-sum[xa-1][yb]+sum[xa-1][ya-1];
}
inline int sq(int xa,int ya,int xb,int yb)
{
return s(xa,ya,xb,yb)*s(xa,ya,xb,yb);
}
inline int maxc(int xa,int ya,int xb,int yb){return xb-xa+yb-ya;}
int dfs(int xa,int ya,int xb,int yb,int c)
{
if(f[xa][ya][xb][yb][c]!=inf)return f[xa][ya][xb][yb][c];
if(c==0)return f[xa][ya][xb][yb][c]=sq(xa,ya,xb,yb);
for(int xx=xa;xx<=xb-1;xx++)
{
if(maxc(xa,ya,xx,yb)>=c-1)
f[xa][ya][xb][yb][c]=min(f[xa][ya][xb][yb][c],sq(xx+1,ya,xb,yb)+dfs(xa,ya,xx,yb,c-1));
if(maxc(xx+1,ya,xb,yb)>=c-1)
f[xa][ya][xb][yb][c]=min(f[xa][ya][xb][yb][c],sq(xa,ya,xx,yb)+dfs(xx+1,ya,xb,yb,c-1));
}
for(int yy=ya;yy<=yb-1;yy++)
{
if(maxc(xa,ya,xb,yy)>=c-1)
f[xa][ya][xb][yb][c]=min(f[xa][ya][xb][yb][c],sq(xa,yy+1,xb,yb)+dfs(xa,ya,xb,yy,c-1));
if(maxc(xa,yy+1,xb,yb)>=c-1)
f[xa][ya][xb][yb][c]=min(f[xa][ya][xb][yb][c],sq(xa,ya,xb,yy)+dfs(xa,yy+1,xb,yb,c-1));
}
return f[xa][ya][xb][yb][c];
}
8. CF1375G Tree Modification
神秘题.
仔细观察操作影响, 发现这个操作实际上是将树黑白染色后将其中一个点反色了.
因为菊花图是一个白点 \(n-1\) 个黑点, 故操作至少需要 \(\min\{x,y\}-1\) 步, \(x,y\) 分别表示两种颜色的点的数量.
实际上这么多步就足够了, 因为若一种颜色 (不妨设为白色) 的点数大于一, 我们总能找到一个黑点连接两个白点, 将三点作为 \(a,b,c\) 操作即可.
9. P2048 [NOI2010] 超级钢琴
典题.
对于 \(k=1\), 给定一个左端点 \(x\), 限制区间长度为 \([l,r]\) 时, 答案即为
其中 \(s_p\) 是前缀和. 通过 ST 表我们能 \(O(n\log n)\) 预处理, \(O(1)\) 取用答案.
对于一般的 \(k\) 实际上只需稍作改动. 将所有的答案扔到堆里面每次取最小值就完事了. 每次取出时将 \((x,l,r,p)\) 分裂成 \((x,l,p-1,p_1)\) 和 \((x,p+1,r,p_2)\) 即可. (其中 \(p\) 是答案的右端点, 可 \(O(1)\) 计算; 分裂是为了只把已经取用的答案去掉)
10. CF383C Propagating tree
简单题. 跑 dfs 序然后区间操作就完事了.
具体地, 对于深度为奇数的点记录的是减量, 对于深度为偶数的点记录的是增量. 增加值的时候, 如果增加的是偶数就正常加, 增加的是奇数就加相反数.
11. CF235A LCM Challenge
水题, 当 \(n\) 为偶数显然 \(n(n-1)(n-2)\), 当 \(n\) 为奇数在 \((n-1)(n-2)(n-3)\) 和 \(n(n-1)(n-3)\ (3\nmid n)\) 里面选较大的一个.
12. CF1396B Stoned Game
有趣博弈论.
首先如果有一堆比其他堆的和都多, 先手直接占住就必胜.
因此双方都需避免该种情况的出现, 此时每次取可以取的最多一堆一定是不劣的.
结果是最后所有石子都被取完, 根据石子的奇偶性判断胜负.
13. [ARC127C] Binary Strings
找规律题, 把字典序和排名列出来很容易就能发现规律.
具体地, 首先开头一位一定是 \(1\), 并将排名减 \(1\). 接下来重复操作:
- 若排名的最高位 (带前导零) 是 \(0\), 则下一位是 \(0\), 去掉最高位并减 \(1\).
- 否则下一位是 \(1\), 去掉最高位, 无需减 \(1\).
- 如果某次减 \(1\) 后变成了 \(0\), 那么立即结束.
说起来太抽象了, 列个表.
(好像还是很抽象)
14. CF1415D XOR-gun
首先这个序列是非严格单增的.
然后注意到一个很强的性质: 如果有三个相邻位最高位为 \(1\), 直接把后面两个合起来就破坏掉了.
结合单增和数值范围, 我们发现当 \(n>60\) 时必然可以用一步破坏!
于是对 \(n\leqslant 60\) 预处理前缀异或和暴力枚举就完事了.
15. CF1349B Orac and Medians
有用技巧: 遇到中位数要想赋值 \(-1/1\).
这个题将小于中位数的赋为 \(-1\), 大于等于的赋为 \(1\).
注意此时如果有一个长度大于 \(1\) 的区间和大于 \(0\), 可以一次操作把它全推成 \(1\), 然后每次在边缘扩展一个就能全赋成中位数.
于是只需求最大子段和 (判掉单独的 \(1\)) 即可.
注意判掉 \(n=1\) 和中位数不存在的情况, 样例相当良心.
16. CF1325D Ehab the Xorcist
首先注意到 \(u,v\) 奇偶性相同且 \(u\leqslant v\). 记 \(d=v-u\).
这个时候一个重要观察是 \((d/2,d/2,u)\) 已经是一个解.
我们只需讨论 \(n=2\) 的情况. 这就是 CF627A.
17. P2467 [SDOI2010]地精部落
我们称题目要求数的为波动序列.
注意到一开始上升的波动序列数和一开始下降的波动序列数相等 (\(a_i\) 和 \(n-a_i\) 的一一对应), 我们不妨设长度为 \(n\) 的开头下降的波动序列数为 \(f_n\).
此时把一个新的 \(i\) 插入, 它一定是山峰, 有转移:
\(f_i=\sum\limits_{j=1}^i f_{j-1}f_{i-j}\dbinom{i-1}{j-1}\), 且 \(j\) 应为奇数 (奇偶位置开头的上升/下降不同)
18. P3939 数颜色
vector 维护每个颜色对应的位置, 二分即可.
19. P3964 [TJOI2013]松鼠聚会
切比雪夫距离转曼哈顿距离, 然后曼哈顿距离可以前缀和随便维护.
20. CF359B Permutation
简单题. 我们令只有一组是前大后小且差恰好为 \(k\), 然后让剩余组都是前小后大, 且差的和大于 \(k\) 即可.