在国庆假期举办的比赛,为了参加这次比赛,也是花了不少力气~~
比赛中文题面,好评!!
题目难度较为简单,在之前的多校和网络赛被强队虐多了,打河南省赛如释重负,完全没有之前那种高强度抗压的感觉了。
最后 rk18, C差一点,本来可以多一题的,可惜~
本场比赛最签的题目,只要按照1023456789
这个顺序构造就行了, n > 10 n \gt 10 n>10 直接-1
。
贪心,找出出现次数最先达到 5 次的字符,然后接下来找出现次数最先到达7次的字符,最后再找出出现次数最先到达5次的字符。
具体来说,从字符序列 S S S 的第一个字符开始,找出一个字符 c c c, 其在 S 1... i S_{1...i} S1...i 中出现了5 次,并且使 i i i 最小。
然后再找出一个字符 c ′ c' c′, 其在 S i + 1... j S_{i+1...j} Si+1...j 中出现了 7 次,并且使 j j j 最小。
最后找出一个字符 c ′ ′ c'' c′′ ,在 S j + 1.. k S_{j+1..k} Sj+1..k 中出现了 5 次。
c c c c c c c ′ . . . c ′ ′ . . . . ccccccc'...c''.... ccccccc′...c′′.... 就是答案。
对于集合 A = { 0 , 1 , 2 , 3 , 4.. x } A=\{0,1,2,3,4..x\} A={0,1,2,3,4..x}
A + A = { 0 , 1 , 2 , 3 , 4 , . . . , 2 × x } A+A = \{0,1,2,3,4,...,2\times x\} A+A={0,1,2,3,4,...,2×x}
此时 ∣ A + A ∣ = 2 × x + 1 |A+A| = 2 \times x + 1 ∣A+A∣=2×x+1 , 这种构造方法可以构造出所有 n n n 是奇数的情况。
当
A = { 0 , 2 , 3 , 4 , 5.. x ∣ x ≥ 3 } A = \{0,2,3,4,5..x | x\ge 3 \} A={0,2,3,4,5..x∣x≥3}
A + A = { 0 , 2 , 3 , 4 , . . , 2 × x } A+A = \{0,2,3,4,.., 2 \times x\} A+A={0,2,3,4,..,2×x}
∣ A + A ∣ = 2 × x |A + A| = 2\times x ∣A+A∣=2×x
可以构造出除 n = 2 或 n = 4 n = 2或n = 4 n=2或n=4 的所有偶数情况。
n = 2 或 n = 4 n=2或n=4 n=2或n=4 无法构造,输出-1
如果 x > y x > y x>y
建议先翻转地图。
然后令 n − x → x n - x \to x n−x→x
n − y → y n - y \to y n−y→y。
对于
流入口1-> L ->流出口1
流入口2-> L ->流出口2
这样子的水管
水可以从流入口1 流向 流出口2
或者从 流入口2 流向 流出口1
对于
流入口1-> I ->流出口1
只能从 流入口1 流向 流出口1
对于起点和终点,只有可能是以下流法
对于子树 m e x = k mex = k mex=k, 那么
1.这个子树一定不能包含 v i = k v_i = k vi=k 这个节点。
2. 并且满足字数上有所有 v i = 0.. k − 1 v_i = 0..k-1 vi=0..k−1 这些节点。
对于条件 1, 我们可以判断所求的子树必须是与节点 v i = k v_i = k vi=k 直接相连的那些子树。
对于条件2,判断一个与节点 v i = k v_i = k vi=k 相连的子树是否满足条件2,只需要判断与节点 v i = k v_i = k vi=k 相连的其他子树的节点的最小值是否大于 k k k 即可。
使用 dfs 预处理,或者 RMQ + dfs序,都可以求得上述问题的解。
很显然,由于答案求的是对于所有数求与运算和。
最后2进制表示下1 的个数。
题目所给出的操作不会影响结果,因为这种操作只会减少数位1的个数。
所以只要求一下所有数的与运算和的二进制下1的个数即可,
对于
ABCA
中,出现了字符字典序降序的情况,或者DD
这种字典序相等的情况,一定会分为2道不同的题目。
对于给定的一个子串 ,要分为 k k k 个题目的分法,其实就相当于在这个子串中插入 k − 1 k - 1 k−1 个挡板的插法,其中有一些挡板的位置已经固定了,也就是上文中所提到的字符字典序出现降序的情况的位置。
现在问题就转换为求解子串中位置固定的挡板的数量。
我们只需要做一个前缀和序列 P P P
P 1 = A S C I I ( S 1 ) − P_1 = ASCII(S_1) - P1=ASCII(S1)−A
+ 1 + 1 +1
若 S i = S i − 1 S_i = S_{i - 1} Si=Si−1
P i = P i − 1 + 4 P_i = P_{i - 1} + 4 Pi=Pi−1+4
否则
P i = P i − 1 + ( S i − S i − 1 + 4 ) % 4 P_i = P_{i - 1} + (S_{i } - S_{i - 1} + 4) \% 4 Pi=Pi−1+(Si−Si−1+4)%4
核心思想:每当 一个子串 S s . . t S_{s..t}~~~ Ss..t , P t − P s > 4 ~~~P_t - P_s \gt 4 Pt−Ps>4 时,说明 这个子串就要被划分成2道题。
现在:
对于一个区间 l , r l,r l,r
固定的挡板的数量就是:
P l % 4 ≠ 0 : ( P l % 4 + P r − P l ) ÷ 4 P_l\% 4\ne 0:(P_l \% 4 + P_r - P_l) \div 4 Pl%4=0:(Pl%4+Pr−Pl)÷4向上取整 − 1 - 1 −1
P l % 4 = 0 : ( 4 + P r − P l ) ÷ 4 P_l\% 4= 0:(4 + P_r - P_l) \div 4 Pl%4=0:(4+Pr−Pl)÷4向上取整 − 1 - 1 −1
P P P 可以使用树状数组维护。