Contest Info
[Practice Link](https://codeforces.com/contest/1217)
Solved | A | B | C | D | E | F |
---|---|---|---|---|---|---|
5/6 | O | O | O | O | O | - |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
A. Creating a Character
签到。
B. Zmei Gorynich
有一个怪兽,它有(x)点血,你有(n)种攻击方式,每种攻击方式可以用无限次,使用一次算一次攻击。
每次攻击会对怪兽造成(min(d_i, curX))点伤害,如果(curX = 0),那么怪兽死亡,否则怪兽回复(h_i)点血,问最少几次攻击可以将怪兽打死,打不死输出(-1)。
思路:
枚举造成最后一次死亡的攻击方式(i),显然前面需要让怪兽的生命值降到(d_i)或者以下即可。
那么大可假定前面怪兽是没有死亡的,如果假设死亡了,那么显然存在另一个最后一次死亡的攻击方式使得答案更优。
那么我们肯定是选(d_i - h_i)差值大的攻击方式进行攻击。
C. The Number Of Good Substrings
题意:
有一个(01)字符串(s),定义(f(l, r))表示(s[l, r])的数值的十进制表示的大小,可以有前导(0)。
现在询问有多少((l, r))使得(f[l, r] = r - l + 1)。
思路:
枚举每个(1)开头的,那么向后处理(20)位,并且记录一下这个数前面有多少个连续的(0)。
显然向后处理(20)位就会让数的大小超过(10^6),显然大于(n),所以枚举的时候注意一下前面的前导(0)是否足够使得满足条件即可。
D. Coloring Edges
题意:
给出一个(n)个点(m)条边的有向图,没有自环和重边,现在要对它进行(k)边染色,使得没有任意一个环,使得环上的边有同一种颜色。
找出最小的(k)并输出方案。
思路:
如果没有环,(k = 1)。
如果有环,大力猜测答案是(2),那么暴力(DFS)找环,对于回祖边,令它的颜色为(2)即可。
E. Sum Queries?
题意:
定义一个可重集合是否平衡,为它里面数字之和(x)的每一位是否在某个数字的相应位上出现过。
现在有两种操作,一种是修改某一个数,另一种是查询([l, r])范围内不平衡的可重集的最小的数字之和(X)是多少。
思路:
大力猜测不平衡的可重集只需要两个数就可以达到不平衡,并且这两个数只需要满足十进制表示的某一位都不为(0)即可。
因为不为(0),如果没有产生进位,那么那一位的数肯定不存在,如果产生进位,最终会进位到某一位他们都为(0)的数,那么也不满足平衡条件。
所以维护十个线段树即可。