2021.10.20 模拟赛题解

T1

刚开始写了个扫描线+线段树,后来发现自己是个弱智……

我们枚举删了哪个矩形,计算去掉这个矩形后所有矩形的交的面积并求和,这个可以通过维护前后缀矩形交实现。

但是这样被 \(n\) 块地毯覆盖的部分会被多计算 \(n-1\) 次,因此需减掉被 \(n\) 块地毯覆盖的部分的面积乘以 \(n-1\)

时间复杂度 \(\mathcal O(n)\)

T2

一个显然的性质是如果我们攻御符,那么我们肯定会把御符都打掉。有了这个性质之后我们就可以把程序分成两部分:只攻兵符和攻完御符后攻兵符。

考虑对两种情况分类讨论。如果只攻兵符,那么我们肯定会选择先用自己武力值最大的兵符攻打敌方武力值最小的兵符,直到自己武力值最大的兵符打不动敌方武力值最小的兵符为止,使用 set 维护即可,每次在 setlower_bound 即可。时间复杂度 \(n\log n\),不知道能不能过得去。注意到武力值的绝对值 \(\le 100\),因此可以将所有武力值相同的缩在一起,这样最多只有 \(201\) 个兵符,就可以 \(201\log 201\) 求解了。

如果先攻御符后攻兵符,那么我们肯定要用武力值尽量小的兵符攻下对方的御符,这样相当于地方添加了无限多个武力值为 \(0\) 的兵符,因此如果我们能够求出攻下对方的御符之后,自己会剩余哪些兵符。这个也可以贪心求解,具体来说我们从大到小遍历所有对方的御符,每次拿自己的武力值 \(\ge\) 该御符的武力值,且武力值最小的兵符,如果不存在则无法攻下全部兵符。这个过程同样可以用 set\(201\log 201\) 的时间内求解。

T3

考虑差分,拿符合条件的最小生成树权值之和 \(\ge X\) 的染色方案个数减去符合条件的最小生成树权值之和 \(\ge X+1\) 的染色方案个数。

考虑如何求符合条件的最小生成树权值和 \(\ge v\) 的染色方案个数,显然条件等价于,所有权值之和 \(<v\) 的生成树上所有边颜色相同。下面不妨假设 \(n\ge 3\)\(n\le 2\) 的情况特判掉即可(事实上赛时没特判也过了/xyx)。如果原图最小生成树权值和 \(\ge v\) 那答案就是 \(2^m\)。否则我们对于每条边,找到包含这条边的最小生成树权值之和,那么根据 MST 的过程可知,该最小生成树与原图最小生成树最多只有一条边不同(删除一条边,新加入一条边),也就是说如果包含这条边的最小生成树权值之和 \(<v\),那这条边必须与最小生成树上所有边颜色均相同,否则对这条边颜色没有限制,直接统计即可。

时间复杂度 \(m\log m\)

T4

https://www.cnblogs.com/ET2006/p/NFLSOJ-10283.html

这个人已经懒到不想打题解链接的 markdown 了(

posted @ 2021-10-21 22:29  tzc_wk  阅读(21)  评论(0)    收藏  举报