7月21日模拟赛总结
here.
T1 推柿子。(以下,令 \(S_i\) 表示 \(\sum ^i_{j=1} a_i\)。)
于是,我们令 \(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 记录方案:记录决策点接着从后往前找。

浙公网安备 33010602011771号