2021年-蓝桥c/c++ b组国赛回忆题解
Posted Kalzn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年-蓝桥c/c++ b组国赛回忆题解相关的知识,希望对你有一定的参考价值。
更新一下。成绩出来了,第18名。估计是H题没能拿全分,最后一个题又没有写出一个比较好的算法。
A
这个题有点坑人,因为他不是一个算法题,而是一个计算机知识题,不知道出题人出这个题的意图。。
刚拿到蒙了,但是回忆了一下,有次我手机限速,百度了一下1Mbps是多少。隐隐约约记得公式是1Mbps=0.125MB/s, 所以。。
B
利用素数筛打表,打到20210605,然后依次判定数字,以及每个数位是不是质数即可。注意这里不认为1是质数。
C
日期题,从2001.1.1枚举到2021.12.31,依次判断即可。
D
dp可解。
d
p
[
i
]
dp[i]
dp[i]为有
i
i
i个节点的二叉数的最小权值。则:
d
p
[
i
]
=
m
i
n
0
≤
j
≤
i
−
1
2
∗
d
p
[
j
]
+
3
∗
d
p
[
i
−
j
−
1
]
+
j
∗
j
∗
(
i
−
j
−
1
)
+
1
dp[i]=min_0\\le j\\le i-1\\2*dp[j]+3*dp[i-j-1]+j*j*(i-j-1)+1\\
dp[i]=min0≤j≤i−12∗dp[j]+3∗dp[i−j−1]+j∗j∗(i−j−1)+1
E
大小写转换不解释。
F
等差序列前缀和+二分,对于x,先二分出之前有多少轮。然后求和,然后加上最后不足的一轮的前缀和。
G
数位dp,令 d p [ i ] [ j ] [ f l a g ] dp[i][j][flag] dp[i][j][flag]为考虑前i位二进制,已经包含j个1,且已经到达上限flag=1,或没有到达上限flag=0的个数。
H
有循环节,我认为一个长度位n的01串会在最多迭代n次后陷入一个长度不长于n的循环节中,但赛后与别人讨论,也有说这个串在最开始就会陷入一个循环节中。都没有证明。不过我写的常数很大。估计没法拿到全分。
I
线段树+区间合并。我们视左括号为+1,右括号为-1,线段树要维护。1、区间和。2、从区间左端点开始求和的区间前缀和最小值和最大值。当进行区间反转时,进行以下操作:1、打标记。2、区间和乘-1。3、区间前缀和最小值和最大值交换,并乘-1。当进行查询时,从L节点开始,二分一个最长的,前缀和全是正数的区间。一般情况下,这个区间的右段端即位所求,因为如果这个区间是最长的,那么这个区间右段端的下一个位置的前缀和一定为负,则到这个右端点的前缀和一定是0。但是有例外,就是这个区间到序列的结束,如果没有前缀和==0的,即位不可能,否则再寻找区间的最后一个0。可以二分寻找。由于是二分套线段树,所以复杂度是 O ( m l o g 2 n ) O(mlog^2n) O(mlog2n)m是2e5,应该可以过吧。。
J
没时间了,因为要检查,直接 O ( n 3 ) O(n^3) O(n3)上了,但是出考场一讨论,傻b了,因为 a ⊕ b ⊕ c = 0 a \\oplus b \\oplus c=0 a⊕b⊕c=0所以 a ⊕ b = c a \\oplus b=c a⊕b=c第三个数直接可以出来的, O ( n 2 ) O(n^2) O(n2)于是少了10%的样例。。。
以上是关于2021年-蓝桥c/c++ b组国赛回忆题解的主要内容,如果未能解决你的问题,请参考以下文章