xyd 2025 NOIP 模拟赛

不知道 xyd 机子现在是不是抽卡,总之我 A 单 log 做法草过去了,最大点只跑了 521ms 😃

上次 xyd S 挂完了,所以这次 xyd NOIP 逆向挂完了,是这个意思吗?那我 NOIP 会不会逆向挂 20pts 啊喵!


2025 NOIP 模拟赛

链接:link
题解:link

时间:3.5h (2025.11.23 08:30~12:00)
题目数:4
难度:

A B C D
\(\color{#52C41A} 绿\) \(\color{#52C41A} 绿\) \(\color{#3498DB} 蓝\) \(\color{#BFBFBF} ?\)
*1800 *1600 *2300 *?

估分:[70,85] + 100 + 44 + 0 = [214,229]
得分:100 + 100 + 44 + 12 = 256
Rank:72/456


场祭

读题。

B 似乎是简单题,容易注意到答案都是 \(2\) 的次幂,所以直接算合法的边数即可。第一个想法是 \(u \to anc_u\) 必须满足 \(u > anc_u \land anc_u \ne fa_u\),但是没过样例 #2;第二个想法是 \(u > \max _{v \in anc_u.son} \{ v \}\),但是没过样例 #2;第三个想法是在按题目中给的顺序遍历的时候,只考虑 \(anc_u\) 的已经遍历过的子节点的 max,就对了。

1h。

开 A,先是一个 \(O(n^2 k)\) 的暴力 dp \(f_{i,j}\) 表示前 \(i\) 个选了 \(j\) 个且 \(i\) 必选的答案。考虑转移 \(f_i = \max _{k<i} \{ f_{k,j-1} + \max(a_i + b_k , a_k + b_i) \}\),后面那个 max 拆开之后,表示为下面这个式子,然后就可以对 \(a_i - b_i\) 做一次离散化然后 BIT 优化了。

\[f_i = \begin{cases} (f_{k,j-1} + b_k) + a_i & a_i - b_i \ge a_k - b_k \\ (f_{k,j-1} + a_k) + b_i & a_i - b_i < a_k - b_k \\ \end{cases} \]

但是这样会带一只 log,数据范围以及 777ms 的时限明显要卡 log,不过确实不会不带 log 的做法了。于是就写这个了。

测了测大样例,怎么 RE!查了 10min+ 才发现样例输入 \(T=19\) 但是只输入了 \(18\) 组数据。赛时说过样例改了,本来改之前还是对的来着,改之后就错了,这么神秘。

抛开 RE 不谈,发现最大点只跑了 716ms,BIT 的 log 太小导致的。不过 716ms 的是 \(k=3\) 的点,有点奇怪,但是 \(O(nk \log n)\) 不至于过不了 \(k=3\) 吧,于是就没去专门写 \(k=3\) 的部分分,实际上貌似也不会不带 log 的做法(

开 C,首先一定不会进位。其次发现第一个 \(a=1,b=1\) 的位置之后一定可以都是 \(1\);第一个 \(b=1\) 的位置之前只能依赖于 \(a\);这两个位置之间如果有 \(a=0,b=0\) 则需要把第一个 \(b=1\) 的位置取 \(0\),贡献为区间长度 \(-1\),否则贡献就是区间长度。

那不直接线段树维护就好了?但是发现要维护 20 左右的东西,那我写个毛线啊……于是只写了暴力,然后两个特殊性质应该都可以写的。

开 D,喜提暴力不会(忘了可以打表 ww),于是直接把样例给的信息全判了一下(样例给了不少关于 \(f,g\) 的信息)然后输出 20120712!

还剩 50min,想去写 C 的 20pts 特殊性质来着,然后忽然发现放学了!寄。

痛失 20pts /ll


补题

欸我 A 怎么草过去了 /jk

欸 D 还真给样例分啊 /jk

补 C,是赛时想复杂了,其实只需要关注 \(b\) 的最高位 \(1\) 就可以了。还是挺简单的,令 \(b\) 的最高位 \(1\) 的位置为 \(p\),那么 \(p\) 前的位置只依赖于 \(a\)。然后比较 \(b_{p \sim r}\)\(\neg a_{p \sim r}\) 的大小(\(\neg\) 表示按位取反):

  • \(b_{p \sim r} \le \neg a_{p \sim r}\),那么显然可以使得 \(b_{p \sim r}' = \neg a_{p \sim r}\),即答案为全 \(1\)
  • \(b_{p \sim r} > \neg a_{p \sim r}\),则可以把 \(b\) 的最高位置 \(0\),然后就可以使得答案中只有一个 \(0\),剩下的全为 \(1\);而且显然不能更优。

而比较字符串大小是线段树上二分的经典操作:可以在线段树节点上维护一个哈希值,判断相等就是哈希值相等,比较大小就只需要看左儿子是否相等就可以了,若相等则向右儿子递归,否则向左儿子递归。


天依宝宝可爱!

posted @ 2025-11-23 15:02  little__bug  阅读(1)  评论(0)    收藏  举报