Codeforces Round #726 (Div. 2)
A
没什么好说的
B
找结论
C
不难发现,最优的方案:中->高,低->中
D
数学题,挺难想到的
n有三种情况
- 奇数
- 偶数(非2的次幂)
- 2的次幂
奇数
此时n的因子一定全为奇数。所以一次操作后n一定变为偶数(且一定含有奇数因子),所以是情况2。
偶数(非2的次幂)
这意味着n有存在一个奇数因子。因此减去这个因子,一定能得到一个奇数(情况1),那么再经过对方的一次操作,一定能回到这种情况(或直接失败)。因此,这种情况是先手必胜。
2的次幂
如果将n减半,那么显然还是情况三。否则将变为情况二,这样对手就处于必胜,这是必败策略。因此,只能每次将n减半,最终取得1的一方失败。
E2
不难发现,所求字符串的本质就是原串的若干前缀相加。进一步可以发现,字典序最小时,一定是一个固定前缀的重复。需要找到这个前缀
情况一
例子:
原串:DCAFB
目标字符串为:DCADCADCA…
结论:找到第一个大于原串开头(‘D’)的位置(‘F’)即可。
情况二
就是先遇到了与开头相同的情况。
例子:
讨论第一个不同的位置(红色):
原串大:
则选择原串DCBA部分为前缀组成目标字符串。
原串小:
继续向后移动(绿色)
复杂度
原串每个位置只会被比较一次,因此复杂度为O(N)
题解好像是用Z函数。。学习一下。
F
首先\(\sum{target_i-v_i}\)一定是偶数,否则为NO,因为每条边操作的该变量是偶数。
然后考虑二分图。
二分图
二分图左右点集各自的必须相等,因为所有边都在两个点集之间。
符合,就是YES,否则NO
非二分图
意味着存在连接一个点集内部的边,通过这类边的变化,一定可以满足二分图情况的条件。
二分图确实挺难想到的。
总结
感觉都是结论题D、F题的结论都很巧妙,自己没有想到。