复健。(10月,OI)

1

IAMOI 击倒了我。

P14113 [IAMOI R4] 彻底怒了

我草,P14113 彻底怒了。P14113 指出了最核心的矛盾点:如果你没有清空 cur 时忘记再加入处理的字符,怎么可能无法通过该题?这确实是我的严重错误。我需要彻底承认我连黄题都不会做,想办法把 CSP-S 糊弄过去。

2

P11234 [CSP-S 2024] 擂台游戏

先挂在这里,一会再写。

3

P14139 「SFMOI Round II」Strange Counting Game

先挂在这里,一会再写。

4

abc426_e Closest Moment

先挂在这里,一会再写。

5~8

补作业了。

9

卢卡斯定理忘了,再写一遍。

对于素数 \(p\),有:

\[\binom{n}{m}=\binom{\lfloor n/p\rfloor}{\lfloor m/p\rfloor}\binom{n\bmod p}{m\bmod p} \]

规定 \(n<m\) 时,\(\binom{n}{m}=0\)

10

CodeForces 1304C Air Conditioner

显然对于能够取到的温度区间 \([l,r]\),在 \(t\) 秒后能够取到的温度区间为 \([l-t,r+t]\)

从头开始,每次遇到顾客就取一次交集,只要最后不为空集即为 YES,否则为 NO

CodeForces 1325D Ehab the Xorcist

考虑到加和比异或和多出的部分即为进位。对每一个 bit 记录一个数表示 \(1\) 的个数,先将异或和的每一位填进去,再算出加和与异或和的差 \(d\)。对于 \(d\) 的每一个 \(1\),原位置低一位的位置填入两个 \(1\),最后任意组合出数组即可。注意当异或和大于加和或者 \(d\) 的最低位为 \(1\) 时一定不合法。

CodeForces 1338B Edge Weight Assignment

先考虑最小值:将某个叶子拉起作为根,如果剩下的叶子到根的距离均为偶数时,那么可以将同一个数都填在路上,答案为 \(1\);否则需要拿出两个 bit,并且这两个 bit 为 \(1\) 的道路集合有交集,答案为 \(3\)

再考虑最大值:我们可以将每个非叶子节点的周围所有道路权值的某个 bit 赋值为 \(1\),这样可以保证进出这个节点后这个 bit 仍为 \(0\)。对于所有叶子的父节点来说,会有 \(\deg-1\) 条路的权值相同,即会给总种数减去 \(\deg-2\)。计算所有叶子父亲的 \(\deg-2\) 之和 \(s\),答案即为 \(n-s-1\)

CodeForces 1385D a-Good String

对于所有长度为 \(2^k\le n,k\in\mathbf{N}\) 的字符串记录变为某个字符的操作数最小值 \(f_{c,k,i}\) 和成为某个字符-优的操作数最小值 \(g_{c,k,i}\),显然有:

\[f_{c,k,i}=\min(f_{c+1,k-1,i}+g_{c,k-1,i+2^{k-1}},g_{c,k-1,i}+f_{c,k-1,i+2^{k-1}}) \]

\[g_{c,k,i}=g_{c,k-1,i}+g_{c,k-1,i+2^{k-1}} \]

\(k=0\) 开始递推即可。

11

CodeForces 1428D Bouncing Boomerangs

\(x\rightarrow\dots\) 为从弹 \(x\) 下的列到其他列。

显然有 \(\dots\rightarrow3\rightarrow2\rightarrow1\)\(\dots\rightarrow3\rightarrow1\),直接找这些即可。

12

出了一道题。

13

今天没学 OI。

14~15

开学考。

16

Orac and Medians

显然有两个距离小于 \(2\) 的大于 \(m\) 数可以做到,否则不行。

17

P8092 [USACO22JAN] Drought B

先走一遍将序列变成单增的,在反向来一遍即可。

18

P14253 旅行(trip)

首先我们注意到一个显然的性质:当选择的区间左端点 \(l\) 固定时,选择越大的 \(r\) 一定不劣,因此我们只需要统计选取 \(l∈[1,n],r=n\) 时的所有区间的答案。

套路地,考虑从后往前做。利用差分思想,我们注意到一个前缀 \(a_{l}\sim i\) 的和为 \(0\) 等价于 \(a_{i+1}\sim n\) 的和减去 \(a_{i+1}\sim n\) 的差是否为 0,那么 \(a_l\sim n,a_{i+1}\sim n\) 的值都容易计算,因此我们可以直接使用 map 来维护从而计算出答案。

时间复杂度 \(O(n\log n)\)

19

写冬日绘板了。

20

P14253 旅行(trip)

考虑到选取 \([l,r]\) 为将每个前缀和减去 \(\sum\limits_{i=1}^{l-1}a_i\),用 map 统计即可。

21

P14255 列车(train)

赛时狂肝问号小时,最后喜提 \(0\) pts,并且没时间打暴力了,最终喜提总分 \(100\) pts。遂写题解祭之。

感谢 @zhuoheng, @Strelizia_ 指出笔误。感谢 @K_yuxiang_rose 解答文末的疑惑。


显然每个 \(S_i\) 集合都是一段区间,设为 \([l_i,r_i]\)

首先可以观察到所有选择的点必定在同一层内(即深度一样)。
:::success[证明也很简单]
若不然,则必存在一个 \(j\) 使得 \(d_{b_j}>d_{b_1}\)

\(\bigcap\limits_{i=2}^{k+1}S_i=[\max\limits_{i=2}^{k+1}l_i,\min\limits_{i=2}^{k+1}r_i]\) 的下界必然 \(\ge d_{b_j}>d_{b_1}\)\(S_1\) 的下界是 \(d_{b_1}\),因此与 \(S_1=\bigcap\limits_{i=2}^{k+1}S_i\) 矛盾。证毕。
:::

于是转为了层内问题,每层互相独立,可以分开考虑。

预处理每个点的深度 \(\mathrm{dep}_i\)(为了方便分层)和以 \(i\) 为根的子树内所有点的最大深度(俗称 \(i\) 点的高度)\(\mathrm{mxdep}_i\)。这个很容易 DFS 求出,也可以直接扫。下文中为了方便,将 \(\mathrm{mxdep}_i\) 称作 \(a_i\)

不难发现 \(S_1=\bigcap\limits_{i=2}^{k+1}S_i\) 等价于 \(r_1=\min\limits_{i=2}^{k+1}r_i\),因为所有点都在同一层,下界自然相等,只需保证上界即可。

场上我想到这里就变得混乱了。做了 \(114514\) 种分类讨论,脑子成了【】,于是光荣爆零。其实下面的分讨并不难。

设当前的数是 \(a_i\)\(>a_i\) 的数有 \(s\) 个,\(=a_i\) 的数有 \(t\) 个。需要 \(t\ge2\),否则不存在 \(a_i=a_1\)\(\min\) 就无法取到了。对 \(\min\) 在哪里取到进行分讨:

  • 在前 \(k\) 颗树,即劈出来的树中取到。
    • 则至少存在一个 \(r_i(2\le i\le k)=r_1\),且所有选的 \(r_i\)\(\ge r_1\)
    • 正着计算需要枚举有几个 \(r_i=r_1\),很繁琐,所以容斥。
    • 需要在 \(s+t-1\)(所有 \(\ge a_i\) 的数,扣掉作为 \(S_1\) 的那一个)中选择 \(k-1\) 个(同样扣掉作为 \(S_1\) 的那一个),扣掉从 \(s\) 个(所有 \(>a_i\) 的数)中选 \(k-1\) 个的情况,总共 \(A_{s+t-1}^{k-1}-A_s^{k-1}\)
    • 由于 \(r_1\) 可以在相等的这 \(t\) 个中任意选,所以答案为 \(t\times(A_{s+t-1}^{k-1}-A_s^{k-1})\)
  • 在第 \(k+1\) 颗树,即剩下来的树中取到。
    • 则所有 \(r_i>r_1\),且 \(r_{k+1}=r_1\)
    • 需要恰好 \(s=k-1\) 才行,若 \(s\) 偏小则后面没有这么多数用来填 \(r_2\sim r_k\),若 \(s\) 偏大则必然有 \(>a_i\) 的数填进了 \(r_{k+1}\) 中,\(r_{k+1}>r_1\)
    • \(r_1\) 可以在相等的这 \(t\) 个中任意选,同时 \(r_2\sim r_k\) 可以任意排列,答案为 \(t\times(k-1)!\)

综上,这题做完了。预处理阶乘与阶乘逆元即可在 \(\Theta(n\log n)\) 的时间内 AC,瓶颈在排序,所以是可以做到线性的,不过没必要。

22

P11790 [JOI 2017 Final] 焚风现象 / Foehn Phenomena

在差分数组上改即可。

23~26

噩梦。

27

28

B. takeout 外卖公司

⼆分答案 \(\mathrm{mid}\),问题转化成:判断能不能在不超过 \(\mathrm{mid}\) 的天数内完成所有订单。
维护⼀个订单的堆,优先级是按照订单的距离从⼤到⼩。⼀开始堆是空的。
将所有距离型骑⼿的订单按照能配送的重量从⼤到⼩排序。
然后枚举这类骑⼿,当枚举到骑⼿时,我们将范围内的订单push到堆中。
此时骑⼿能完成堆中的任何订单,那么最优的⽅案是,从堆中取出距离最⼤的个订单,分配给骑⼿。
⾄此,所有距离型选⼿已经尽量完成了能完成的订单。
然后,将所有重量型骑⼿的订单按照能配送的距离从⼤到⼩排序:。
枚举所有这类骑⼿,给每个骑⼿分配他能完成的距离最⻓的个订单。

29

P5270 无论怎样神树大人都会删库跑路

何意味?

考虑设 \(\mathrm{hash}\)\(\prod (a_i+2)\bmod(10^9+7)\),这样可以保证一个字符串任意排列后 \(\mathrm{hash}\) 不变,并且 \(\mathrm{hash}\) 能够用前缀积统计。

我们观察题目发现询问是有周期的。具体来说,\(X\) 的长度大于等于 \(n\) 时(小于 \(n\) 需要特判)\(X\) 的最后 \(n\) 个字符会以 \(m\) 次拼接为周期进行循环。所以我们知道了一个周期时的答案,就可以知道所有情况的答案了。

实现时,我们在一个周期完成检查当周期开始时 \(X\) 的长度是否大于等于 \(n\),如果是就直接计算剩余答案。还要注意要用一个栈将 \(X\) 的最后 \(n\) 个字符涉及的小串记录下来。细节较多,具体请看 code,复杂度 \(O(m)\)

30

posted @ 2025-10-01 21:10  01bit  阅读(25)  评论(0)    收藏  举报