2023.4-2023.5 水题记录
摆烂了属于是.
1. P4071 [SDOI2016]排列计数#
错排板子, 显然答案为 , m 为错排数.
2. P5104 红包发红包#
连续型随机变量入门题. 本人不太熟练, 写一下过程.
根据题中条件, 抽到钱数在 间的概率为 . 求导得概率密度函数
故抽一次得到钱数的期望为
抽第 次时, 枚举第一次抽到的钱数 , 并且根据抽 次即 的结果, 有
数学归纳易证 .
3. CF1333E Road to 1600#
这题是怎么紫的?
显然 不可能; 对 我们可以构造:
大概思路是把后绕到最后一步需要马步, 然后试着让车能一次走完.
对于更大的 就简单了, 直接在外面绕圈就行了.
4. CF717E Paint it really, really dark gray#
实际上很简单. 直接 dfs 就行, 如果当前点颜色不正确就和父亲结点反复横跳一下 (对于根结点就是随便找一个子结点跳来跳去, 反正路径不要求在根结点结束)
5. CF1534D Lost Tree#
这种东西应该是套路题, 但是我没见过.
首先钦定 为根询问一下, 按照深度奇偶将点分为两部分.
然后实际上距离这个条件就没啥用了. 我们取两部分中更小的一部分, 直接找出来和它们直接相连的点就能还原整棵树的形态.
6. CF938E Max History#
数数题.
发现这是个严格递增的爬坡求和 (不算最后一个元素), 我们考虑每个元素的贡献.
我们数出来严格比 小的数的数量 , 枚举 前放的数的数量有
化简式子作为练习, 最后算出来得 , 求和即可.
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#
神秘题.
仔细观察操作影响, 发现这个操作实际上是将树黑白染色后将其中一个点反色了.
因为菊花图是一个白点 个黑点, 故操作至少需要 步, 分别表示两种颜色的点的数量.
实际上这么多步就足够了, 因为若一种颜色 (不妨设为白色) 的点数大于一, 我们总能找到一个黑点连接两个白点, 将三点作为 操作即可.
9. P2048 [NOI2010] 超级钢琴#
典题.
对于 , 给定一个左端点 , 限制区间长度为 时, 答案即为
其中 是前缀和. 通过 ST 表我们能 预处理, 取用答案.
对于一般的 实际上只需稍作改动. 将所有的答案扔到堆里面每次取最小值就完事了. 每次取出时将 分裂成 和 即可. (其中 是答案的右端点, 可 计算; 分裂是为了只把已经取用的答案去掉)
10. CF383C Propagating tree#
简单题. 跑 dfs 序然后区间操作就完事了.
具体地, 对于深度为奇数的点记录的是减量, 对于深度为偶数的点记录的是增量. 增加值的时候, 如果增加的是偶数就正常加, 增加的是奇数就加相反数.
11. CF235A LCM Challenge#
水题, 当 为偶数显然 , 当 为奇数在 和 里面选较大的一个.
12. CF1396B Stoned Game#
有趣博弈论.
首先如果有一堆比其他堆的和都多, 先手直接占住就必胜.
因此双方都需避免该种情况的出现, 此时每次取可以取的最多一堆一定是不劣的.
结果是最后所有石子都被取完, 根据石子的奇偶性判断胜负.
13. [ARC127C] Binary Strings#
找规律题, 把字典序和排名列出来很容易就能发现规律.
具体地, 首先开头一位一定是 , 并将排名减 . 接下来重复操作:
- 若排名的最高位 (带前导零) 是 , 则下一位是 , 去掉最高位并减 .
- 否则下一位是 , 去掉最高位, 无需减 .
- 如果某次减 后变成了 , 那么立即结束.
说起来太抽象了, 列个表.
(好像还是很抽象)
14. CF1415D XOR-gun#
首先这个序列是非严格单增的.
然后注意到一个很强的性质: 如果有三个相邻位最高位为 , 直接把后面两个合起来就破坏掉了.
结合单增和数值范围, 我们发现当 时必然可以用一步破坏!
于是对 预处理前缀异或和暴力枚举就完事了.
15. CF1349B Orac and Medians#
有用技巧: 遇到中位数要想赋值 .
这个题将小于中位数的赋为 , 大于等于的赋为 .
注意此时如果有一个长度大于 的区间和大于 , 可以一次操作把它全推成 , 然后每次在边缘扩展一个就能全赋成中位数.
于是只需求最大子段和 (判掉单独的 ) 即可.
注意判掉 和中位数不存在的情况, 样例相当良心.
16. CF1325D Ehab the Xorcist#
首先注意到 奇偶性相同且 . 记 .
这个时候一个重要观察是 已经是一个解.
我们只需讨论 的情况. 这就是 CF627A.
17. P2467 [SDOI2010]地精部落#
我们称题目要求数的为波动序列.
注意到一开始上升的波动序列数和一开始下降的波动序列数相等 ( 和 的一一对应), 我们不妨设长度为 的开头下降的波动序列数为 .
此时把一个新的 插入, 它一定是山峰, 有转移:
, 且 应为奇数 (奇偶位置开头的上升/下降不同)
18. P3939 数颜色#
vector 维护每个颜色对应的位置, 二分即可.
19. P3964 [TJOI2013]松鼠聚会#
切比雪夫距离转曼哈顿距离, 然后曼哈顿距离可以前缀和随便维护.
20. CF359B Permutation#
简单题. 我们令只有一组是前大后小且差恰好为 , 然后让剩余组都是前小后大, 且差的和大于 即可.
作者:pjykk
出处:https://www.cnblogs.com/pjykk/p/17438046.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现