模拟赛

模拟赛

2025多校冲刺CSP模拟赛1

交友(friend)

原题链接

宝宝题,直接贪心。

如果有 CGC 这样横向或纵向的子串出现,必然是直接给两端匹配,否则扫描矩阵的每一行,贪心选就行。

炼金(alchemy)

原题链接

赛时写了一个复杂的不真实的做法,可能是题目的特殊性质的原因,总之是冲过去了。

思路就是二分答案,然后搜。(这里用BFS应该更方便一些)

如果当前种类金属不够,就向它的原料索取。加一些操作以保证复杂度即可。

这里有一个为什么要用二分答案的问题。在上述做法中,显然可能有多个不同金属的合成会用到同一种金属,由于金属合成是单向的,预先消耗过多某一类金属可能使其他金属的合成不够用,所以我们采用需要多少拿多少的暴力思路,然后二分答案就很自然了。

当然存在不用二分答案的做法,看你喜欢写什么。

磁铁(magnet)

原题链接

我要开始辱骂自己了:是不是唐人,预设型DP,都考过无数遍的trick了还能被创飞!这确实是我的严重错误。我需要彻底承认我完全没有水平,过的预设型DP题也全是签到变着花样耍阴招的垃圾水题,现在毫无天赋的 Oier 要想办法把国庆集训的多校联训糊弄过去。

显然的一个思路是把这些磁铁无缝衔接地排列起来,然后把多出来没用到的空位插到相邻磁铁之间,是一个插板状物。

先按照升序排序,这样容易计算贡献,设 $ f_{ i,j,k } $ 表示前 \(i\) 个磁铁分为 \(j\) 个连通块,一共占据了 \(k\) 个空位的方案数。转移有:

  1. 当前磁铁是一个新的连通块, $ f_{ i,j,k } = f_{ i-1,j-1,k-1 } $

  2. 并到之前的连通块两端, $ f_{ i,j,k } = 2 \times f_{ i-1,j,k-len(i) } \times j $

  3. 合并两个连通块, $ f_{ i,j,k } = f_{ i-1,j+1,k-2len(i)+1 } \times (j+1) \times j $

答案就是 $ \sum_{ i \ge 1 } f_{ n,1,i } \times \dbinom{ m-i+n }{n} $

铁轨(rail)

原题链接

感觉这题很厉害啊。

首先进行一个聪明的转化:把每个速度抽象成节点,每个路段就是速度之间的连边,一个完整的路线应该是形成一个欧拉通路(现在是不完整的)。

为方便起见,我们建立一个速度为 \(inf\) 的虚点,最大点向 \(inf\) 连边, \(inf\) 向最小点连边。(以上所有边都是没有代价的),容易发现此时目标改为欧拉回路没有影响。

现在问题变成了:在这些节点之间连一些边(加速边没有代价,减速边代价为两者之差),使得原图形成一个欧拉回路。

我们拿出值域上相邻的两点,考虑值域跨度能够同时包含他们的边,如果这是一个欧拉回路,那么加速边和减速边的数量应该是相等的。反之,如果不相等,手动加边,统计代价。

这样原图变成了很多欧拉回路连通块。最后一个问题是不连通,仍然需要加边,显然可能有用的边一定是值域相邻的节点之间,用MST状物维护就好了。

posted @ 2025-10-02 17:55  Abnormal123  阅读(39)  评论(1)    收藏  举报