2022 年第四届河南省 CCPC 大学生程序设计竞赛 参赛记录

前言

在国庆假期举办的比赛,为了参加这次比赛,也是花了不少力气~~
比赛中文题面,好评!!
题目难度较为简单,在之前的多校和网络赛被强队虐多了,打河南省赛如释重负,完全没有之前那种高强度抗压的感觉了。
最后 rk18, C差一点,本来可以多一题的,可惜~

A. Mocha 上小班了

本场比赛最签的题目,只要按照1023456789 这个顺序构造就行了, n > 10 n \gt 10 n>10 直接-1

E. Serval 的俳句

贪心,找出出现次数最先达到 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′′.... 就是答案。

F. 集合之和

对于集合 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..xx3}
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=2n=4 的所有偶数情况。
n = 2 或 n = 4 n=2或n=4 n=2n=4 无法构造,输出-1

H. 旋转水管

如果 x > y x > y x>y
建议先翻转地图。
然后令 n − x → x n - x \to x nxx
n − y → y n - y \to y nyy

对于
流入口1-> L ->流出口1
流入口2-> L ->流出口2
这样子的水管
水可以从流入口1 流向 流出口2
或者从 流入口2 流向 流出口1
对于
流入口1-> I ->流出口1
只能从 流入口1 流向 流出口1
对于起点和终点,只有可能是以下流法

在这里插入图片描述
最后模拟一下所有情况即可。

J. Mex Tree

对于子树 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..k1 这些节点。

对于条件 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序,都可以求得上述问题的解。

G. Mocha上大班了

很显然,由于答案求的是对于所有数求与运算和。
最后2进制表示下1 的个数。
题目所给出的操作不会影响结果,因为这种操作只会减少数位1的个数。
所以只要求一下所有数的与运算和的二进制下1的个数即可,

C. Serval的试卷答案

对于
ABCA 中,出现了字符字典序降序的情况,或者DD 这种字典序相等的情况,一定会分为2道不同的题目。
对于给定的一个子串 ,要分为 k k k 个题目的分法,其实就相当于在这个子串中插入 k − 1 k - 1 k1 个挡板的插法,其中有一些挡板的位置已经固定了,也就是上文中所提到的字符字典序出现降序的情况的位置。
现在问题就转换为求解子串中位置固定的挡板的数量。
我们只需要做一个前缀和序列 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=Si1
P i = P i − 1 + 4 P_i = P_{i - 1} + 4 Pi=Pi1+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=Pi1+(SiSi1+4)%4
核心思想:每当 一个子串 S s . . t     S_{s..t}~~~ Ss..t   ,     P t − P s > 4 ~~~P_t - P_s \gt 4    PtPs>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+PrPl)÷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+PrPl)÷4向上取整 − 1 - 1 1

P P P 可以使用树状数组维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值