2024 暑期模拟赛 #2

怎么 swap(min(B,C),D) /wx


2024暑期CSP-S&NOIP模拟赛第2套

链接:link
题解:link 的题解区

时间:4h (2025.10.22 14:00~18:00)
题目数:4
难度:

A B C D
\(\color{#F39C11} 橙\) \(\color{#52C41A} 绿\) \(\color{#52C41A} 绿\) \(\color{#52C41A} 绿\)
*1100 *1700 *1700 *1800

估分:100 + 60 + 50 + 100 = 310
得分:100 + 60 + 50 + 100 = 310
Rank:1/6


场祭

读题。

A 签,5min 切掉了。

开 B,发现不怎么会。于是开 C,似乎是线段树状物,但是好像不怎么会维护,嗯。开 D,欸这不直接最值分治就好了?然后发现在数集 \(S\) 里统计满足 \(x \in S \land a \oplus x \le b\)\(x\) 个数似乎不怎么好做,\(b\) 全是 \(1\) 的时候会导致遍历整棵 01trie,所以就不会了。

回去看 C,感觉应该比 B 可做一点,发现似乎能开线段树维护每个位置前面第一个 \(x \in [1,k]\) 的位置,发现真的可以维护的!于是写写写,测样例发现不过,哦哦哦我没维护答案()然后发现答案好像很不好维护,想了半天无果,还剩 2h 的时候扔掉了。

打暴力!C 60pts,B 50pts,给的很足,好评!

C 甚至 \(k \le 3\) 的特殊性质都没想出来。

继续看 D,觉得应该是对的啊……然后发现这不很能维护嘛(,直接在 01trie 上搞一个二分状物就可以了,写写写,大样例没过!瞪了 10min 没瞪出来,于是快速打了个暴力去拍一拍,发现怎么一个区间被处理了两遍?哦某个地方应该是 >= 而不是 >,改了就过了。

剩 10min+,感觉什么都干不了了,但实际上确实什么都干不了了。


补题

补 B,怎么想到的还能构造 /jk

因为如果能类似于特殊性质,把答案串构造出来,那么代价是好算的,所以考虑直接构造,令 \(f_{i,j,k,0/1/2}\) 为分别用了 \(i,j,k\)\(0,1,2\),且最后一位是 \(0/1/2\) 的方案数,转移是平凡的,就做完了(

根据实现方式,如果是直接按照位置差来计算代价增加量,最后答案需要除以 \(2\),因为当把 \(s_i\) 换到 \(s_j\) 的时候,\(s_j\) 同时也换到了 \(s_i\),这样代价就会计算两倍,即使是形成了多元环也是一样的。

补 C,草怎么这么简单,直接线段树维护区间第一次出现 \(x \in [1,k]\) 的位置和最后一次出现的位置,然后发现就很能算答案了。。赛时一直在想维护区间内的点前面第一个 \(x\) 的位置就不去想想维护区间整体的信息我是【】吧。。

只不过代码有一点石就是了。/tuu


天依宝宝可爱!

posted @ 2025-10-22 19:52  little__bug  阅读(15)  评论(0)    收藏  举报