2023.4-2023.5 水题记录

摆烂了属于是.

1. P4071 [SDOI2016]排列计数#

错排板子, 显然答案为 (nm)Dnm, Dkm 为错排数.

2. P5104 红包发红包#

连续型随机变量入门题. 本人不太熟练, 写一下过程.

根据题中条件, 抽到钱数在 [0,x](x[0,w]) 间的概率为 xw. 求导得概率密度函数

f(x)={1w,x[0,w]0,otherwise

故抽一次得到钱数的期望为

E1(w)=+xf(x)dx=0wxf(x)dx=w2

抽第 k 次时, 枚举第一次抽到的钱数 x, 并且根据抽 k1 次即 Ek1(w) 的结果, 有

Ek(w)=0wEk1(wx)f(x)dx

数学归纳易证 Ek(w)=w2k.

3. CF1333E Road to 1600#

这题是怎么紫的?

显然 n=2 不可能; 对 n=3 我们可以构造:

287346159

大概思路是把后绕到最后一步需要马步, 然后试着让车能一次走完.

对于更大的 n 就简单了, 直接在外面绕圈就行了.

4. CF717E Paint it really, really dark gray#

实际上很简单. 直接 dfs 就行, 如果当前点颜色不正确就和父亲结点反复横跳一下 (对于根结点就是随便找一个子结点跳来跳去, 反正路径不要求在根结点结束)

5. CF1534D Lost Tree#

这种东西应该是套路题, 但是我没见过.

首先钦定 1 为根询问一下, 按照深度奇偶将点分为两部分.

然后实际上距离这个条件就没啥用了. 我们取两部分中更小的一部分, 直接找出来和它们直接相连的点就能还原整棵树的形态.

6. CF938E Max History#

数数题.

发现这是个严格递增的爬坡求和 (不算最后一个元素), 我们考虑每个元素的贡献.

我们数出来严格比 ap 小的数的数量 kp, 枚举 ap 前放的数的数量有

i=0kp(kpi)i!(ni1)!

化简式子作为练习, 最后算出来得 n!nkp, 求和即可.

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#

神秘题.

仔细观察操作影响, 发现这个操作实际上是将树黑白染色后将其中一个点反色了.

因为菊花图是一个白点 n1 个黑点, 故操作至少需要 min{x,y}1 步, x,y 分别表示两种颜色的点的数量.

实际上这么多步就足够了, 因为若一种颜色 (不妨设为白色) 的点数大于一, 我们总能找到一个黑点连接两个白点, 将三点作为 a,b,c 操作即可.

9. P2048 [NOI2010] 超级钢琴#

典题.

对于 k=1, 给定一个左端点 x, 限制区间长度为 [l,r] 时, 答案即为

max{si}sx+l,i[x+l1,min{n,x+r1}]

其中 sp 是前缀和. 通过 ST 表我们能 O(nlogn) 预处理, O(1) 取用答案.

对于一般的 k 实际上只需稍作改动. 将所有的答案扔到堆里面每次取最小值就完事了. 每次取出时将 (x,l,r,p) 分裂成 (x,l,p1,p1)(x,p+1,r,p2) 即可. (其中 p 是答案的右端点, 可 O(1) 计算; 分裂是为了只把已经取用的答案去掉)

10. CF383C Propagating tree#

简单题. 跑 dfs 序然后区间操作就完事了.

具体地, 对于深度为奇数的点记录的是减量, 对于深度为偶数的点记录的是增量. 增加值的时候, 如果增加的是偶数就正常加, 增加的是奇数就加相反数.

11. CF235A LCM Challenge#

水题, 当 n 为偶数显然 n(n1)(n2), 当 n 为奇数在 (n1)(n2)(n3)n(n1)(n3) (3n) 里面选较大的一个.

12. CF1396B Stoned Game#

有趣博弈论.

首先如果有一堆比其他堆的和都多, 先手直接占住就必胜.

因此双方都需避免该种情况的出现, 此时每次取可以取的最多一堆一定是不劣的.

结果是最后所有石子都被取完, 根据石子的奇偶性判断胜负.

13. [ARC127C] Binary Strings#

找规律题, 把字典序和排名列出来很容易就能发现规律.

具体地, 首先开头一位一定是 1, 并将排名减 1. 接下来重复操作:

  • 若排名的最高位 (带前导零) 是 0, 则下一位是 0, 去掉最高位并减 1.
  • 否则下一位是 1, 去掉最高位, 无需减 1.
  • 如果某次减 1 后变成了 0, 那么立即结束.

说起来太抽象了, 列个表.

image

(好像还是很抽象)

14. CF1415D XOR-gun#

首先这个序列是非严格单增的.

然后注意到一个很强的性质: 如果有三个相邻位最高位为 1, 直接把后面两个合起来就破坏掉了.

结合单增和数值范围, 我们发现当 n>60 时必然可以用一步破坏!

于是对 n60 预处理前缀异或和暴力枚举就完事了.

15. CF1349B Orac and Medians#

有用技巧: 遇到中位数要想赋值 1/1.

这个题将小于中位数的赋为 1, 大于等于的赋为 1.

注意此时如果有一个长度大于 1 的区间和大于 0, 可以一次操作把它全推成 1, 然后每次在边缘扩展一个就能全赋成中位数.

于是只需求最大子段和 (判掉单独的 1) 即可.

注意判掉 n=1 和中位数不存在的情况, 样例相当良心.

16. CF1325D Ehab the Xorcist#

首先注意到 u,v 奇偶性相同且 uv. 记 d=vu.

这个时候一个重要观察是 (d/2,d/2,u) 已经是一个解.

我们只需讨论 n=2 的情况. 这就是 CF627A.

17. P2467 [SDOI2010]地精部落#

我们称题目要求数的为波动序列.

注意到一开始上升的波动序列数和一开始下降的波动序列数相等 (ainai 的一一对应), 我们不妨设长度为 n 的开头下降的波动序列数为 fn.

此时把一个新的 i 插入, 它一定是山峰, 有转移:

fi=j=1ifj1fij(i1j1), 且 j 应为奇数 (奇偶位置开头的上升/下降不同)

18. P3939 数颜色#

vector 维护每个颜色对应的位置, 二分即可.

19. P3964 [TJOI2013]松鼠聚会#

切比雪夫距离转曼哈顿距离, 然后曼哈顿距离可以前缀和随便维护.

20. CF359B Permutation#

简单题. 我们令只有一组是前大后小且差恰好为 k, 然后让剩余组都是前小后大, 且差的和大于 k 即可.

作者:pjykk

出处:https://www.cnblogs.com/pjykk/p/17438046.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   pjykk  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示