Codeforces Round #585 (Div. 2)
D. Ticket Game
Description
给定一个长度为(n)的数字串((n)为偶数),其中有一些位置的值被删除了用(?)表示,有两个人要在这个上面玩一个游戏。这两个人会轮流把串中的问号替换成一个数字(in [0, 9]),如果最后前一半所有数位的和等于后一半所有数位的和,那么后手赢,否则先手赢。现在给定这个带(?)的数字串,你需要求出谁最后会赢
(2 leq n leq 2 imes 10^5)
Solution
我们可以先考虑只有一边有(?)的情况,设(?)的数量为(C)((C)为偶数),有(?)的那边比另一边的权值和少(d),
- (Case_1),如果(d = frac{C}{2} imes 9),先手放(x),后手就放(9-x),后手赢
- (Case_2),如果(d > frac{C}{2} imes 9),先手就一直放(0),不论后手怎么放,(d)总是大于(0),先手赢
- (Case_3),如果(d < frac{C}{2} imes 9),先手就一直放(9),不论后手怎么放,(d)最后会小于(0),先手赢
现在我们再考虑一下两边都有括号的情况,我们假设左边的(?)较多,左边的权值和比右边的少(d),括号数量的差为(C)
- 如果(d = frac{C}{2} imes 9),那么不论先手怎么放,后手就可以对称的去放,然后转化为(Case_1)
- 如果(d > frac{C}{2} imes 9),先手就可以在右边放一个(9),以此来转换先后手,然后再按照对手的操作对称去放。最后只有左边有奇数个(?)的时候,(d > frac{C}{2} imes 9 + 9)。等对手放完之后,就转化为了(Case_2)
- 如果(d < frac{C}{2} imes 9),先手就可以在右边放一个(0),以此来转换先后手,然后再按照对手的操作对称去放。最后只有左边有奇数个(?)的时候,(d < frac{C}{2} imes 9)。等对手放完之后,就转化为了(Case_3)
所以我们就只需要知道(C, d),就可以确定胜负了
(Solution)思路来源:mohamedeltair
E. Marbles
Description
给定一个长度为(n)的数列(a_i),你可以花费(1)的代价交换相邻的两个元素。现在你要使得每种权值的下标连续,问最小需要多少花费
(2 leq n leq 4 imes 10^5, 1 leq a_i leq 20)
Solution
我们可以先处理出任意一种权值考虑对于任意一个其它权值的集合,如果要把所有这种权值的数都移到最左边需要的代价。然后我们就可以设(dp[s])表示把(s)集合中的权值都处理完后(移动到最左边)所需要的最少代价,然后我们就每次枚举一种没有处理的权值转移就可以了
F. Radio Stations
Description
有(p)个信号站,每一个信号站只有在总站发出的功率在([l_i, r_i])时才能正常工作,现在有(n)个形如(x_i)号信号站和(y_i)至少要有一个正常工作的限制,有(m)个形如(x_i)号信号站和(y_i)不能同时正常工作的限制
总站能发出的功率(f)的范围是(in [1, M]),你现在需要确定总站发出的功率以及哪些信号站工作,使其满足给定的所有限制
(2 leq n, p, M, m leq 4 imes 10^5)
Solution
我们可以发现如果没有功率的限制,那就是一道(2-SAT)的模板题,现在我们考虑怎么解决功率的限制
我们可以考虑对于每一种功率都建一种变量,第(i)个点表示(f geq i),其逆否命题表示(f < i)。我们对于(f geq i)向(f geq i - 1)连边,因为如果(f)满足前者,显然就会满足后者。同理,我们对于(f < i)向(f < i + 1)连边。然后我们可以把信号站对于功率的限制转化为下面两个限制:(f geq l_i)和不选(i)至少有一个成立,(f < r_i + 1)和不选(i)至少有(1)个成立。然后就直接跑(2-SAT),随便跑出一组解就可以了
Summary
这场也只能算是打得一般,(E)题就是一道思博题,还想了半个多小时...
以后打的时候一定要注意做题速度,因为(Div2)有很多手速场。比如说这场,从第(4)名到差不多(200)名都是(A)了(5)题,就是看谁的手速快