[DMY]2024 CSP-S 模拟赛 Day 18

今天打的虽然有遗憾,但是也在情理之中。

赛时

看了眼 T1,没有别人的犹豫,第一眼就看到了 \(n\le 5000\),然后开始写最短路。

算了一下 dijkstra 根本跑不满,无需 deque 的 01bfs。

写完以后大概 40min,改一下 longlong 就扔了。

赛后没挂,100pts。

T2 一开始没有思路,在纸上画画图感觉可以线段树搞。但是区间数字种类数我只会莫队,再考虑到动态开点什么的,没有继续下去这个思路。

考虑贪心。之前做过一道类似的题,赛后 liang 大佬说是游荡的奶牛。当时这道题是要让最多的线段不交,模仿类似的方法,我们可以先把 \(a\) 按照右端点排序以后枚举去计算 \(b\) 的贡献。我维护了三个指针,分别代表当前需要考虑的 \(a\) 的范围,当前可以作为答案的候选 \(b\) 的范围,以及当前(即上一次)选择的最靠右的答案的右端点位置。

这样排序过后可以把 \(b\) 左端点都比当前 \(a\) 右端点小的位置全都维护其右端点,插到一个 set 里面。每次贪心的选择当前候选答案中最大的右端点作为答案。

对于无解的情况,就是候选答案为空或者候选答案不符合条件,特判即可。

没有挂分,拿下2血。

T3 想了挺久的,最开始忽略最后一个基环树结构的限制,跑一个纯正的 DP,但是加上最终限制的时候无法直接处理。

思考最终的答案肯定是当前的 DP 值减去这个限制给予的答案,那我只需要找到这个贡献即可。

这个比较好实现,我们把 DP 数组改成三维,新的维度表示第一层选择的元素编号为 \(i\)

这样可以先预处理前两层的 DP 值,剩下的按照方程:

\[dp_{i,j,k}=\sum_{j=1}^{siz_{i-1}} dp_{i,j,k-1} ~~~~ 条件不想写了 \]

转移就行了。

写完以后算了算可以有 30pts。

此时时间剩的不多,T4 按照题意直接 DP 可以有 10pts,我看 \(a_i=0\) 的性质好像可以写,先估一下。

写完正常 DP 以后发现错了,检查发现没有赋初值。

意识到之后过了样例。发现刚才的性质发现就是一个线段树。

时间还剩 10min,发现这个性质好像可以用树状数组代替线段树从而节省时间,写完以后才意识到树状数组无法维护,导致丢了20pts。

赛后

最终得分 100+100+30+10=240,没有挂分,但是也没有写到能写的分数。

CSP-S下周就考了,所以基础代码能力还需要沉淀。

赛后试了试 10min 能不能写一颗线段树,发现不能。

现在思维方面不算太差,但是容易想偏导致该写的分数没写上去,就比如这次 T4 的初值和线段树部分。

posted @ 2024-10-19 14:58  Redamancy_Lydic  阅读(8)  评论(0编辑  收藏  举报