7月21日模拟赛总结

here.

T1 推柿子。(以下,令 \(S_i\) 表示 \(\sum ^i_{j=1} a_i\)。)

\[\sum ^r_{i=l} a_i=r-l+1\\ S_r-S_{l-1}=r-l+1\\ S_r-r=S_{l-1}-(l-1) \]

于是,我们令 \(p_i=S_i-i\),问题转化为求序列中有多少对 \(p_i\) 相等,用 map 做即可。

T2 容易发现这题和昨天 T1 很像,只是多了一个恰好包含一个逆序对的约束。于是,只要有一个环里边存在和当前点相邻的点,就可以只剩下一个逆序对(如果不相邻就会有不止一个),用个 map 统计一下即可。

T3 依旧令 \(S_i\) 表示 \(\sum ^i_{j=1} a_i\)。根据抽屉原理,\(S_i\)\(n+1\) 个,则它们中必定有两个同余。这表明,序列必定存在一个子区间,它满足 \(n \mid \sum a_i\)。然后就变成了和 T1 一样的问题。

T4 首先,我们注意到一个 fun fact。事实上,牌型的大小是固定的,就是 \(\sum a_i \bmod n\),为什么呢,因为第一部分的和是 \(1000\) 的倍数!

有了这个结论,我们再来考虑如何【凑千】。显然,\(n \ge 1000\) 时,根据抽屉原理,按照上题做法即可。\(n<1000\) 时,考虑 01 背包即可。令 \(dp_{i,j}\) 表示前 \(i\) 张牌、总和为 \(j\) 时是否可行,转移直接从 \(dp_{i-1,j}\)\(dp_{i-1,j-a_i}\) 转移即可,初始 \(dp_{0,0}=1\),答案 \(dp_{n,0}\)。需要额外记录一下方案。

T5 这题,先拆绝对值,分讨一下得到四种情况,大概是 \(p_i,i,p_j,j\) 四个东西加加减减之类的。然后把同下标的放到一起,显然 \(i\) 这块是可以枚举出来的,我们要求总体最小,那么 \(j\) 那块就要最小,把它扔到树状数组里维护即可。其实是比较套路的。

值得注意的是,这题暴力复杂度是对的,但具体我也没看懂证明。。。所以先咕了。我懒了,写的暴力。。。逃(

成绩:0+0+0+0+0,rk 不重要了,因为大家都保龄。最后一天还炸是吧好好好。。。

总结:

  • 数学方面:绝对值拆开分讨、同下标的放到一起、抽屉原理。

  • dp 记录方案:记录决策点接着从后往前找。

posted @ 2025-07-24 23:11  _KidA  阅读(9)  评论(0)    收藏  举报