Educational Codeforces Round 72
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\)的数,那么也不满足平衡条件。
所以维护十个线段树即可。