2020洛谷初赛模拟难题详解

Update

首先,先申明一下,本文有一点愤怒的情感……

怎么感觉一直在 d d d人QAQ

4

首先,可以得到这张图片的大小为 4096 × 2160 × 24 = n ( b i t ) 4096×2160×24=n(bit) 4096×2160×24=n(bit)

所以,它的大小为 n 102 4 2 \frac n {1024^2} 10242nMB或 n 1024 \frac n {1024} 1024nKB;直接带进去计算,看看哪个最接近即可。

5

有一个nth_element的神奇的函数,基于随机化,可以做到 O ( n ) O(n) O(n),而且极难卡掉。

顺便说一下nth_element函数是怎样工作的:每次随机一个数,把所有比这个数小的放到左边,其他的放到右边;如果左边的数偏少,说明它太小了,要往右边查;否则往左边查。

基于随机化的这个函数的复杂度为 O ( n + n 2 + n 4 + … … + 1 ) O(n+\frac n 2+\frac n 4+……+1) O(n+2n+4n++1),大约是 O ( 2 n ) O(2n) O(2n),省略系数就是 O ( n ) O(n) O(n)

但是,如果运气差到极点,每次操作(即选定一个数,两边分)选定的数都是最小值或最大值,甚至比最小值还要小,比最大值还要大……那么,这个复杂度显然会退化到 O ( n 2 ) O(n^2) O(n2)

但是,千万不要害怕用这个函数,就像我曾经很菜的时候(现在也很菜)在洛谷里面发帖怕快排被卡……(我是不是很菜)……考场上,不会有人卡这个;再说了,有人会卡,也绝对不可能卡掉,这样基于随机数的函数如果你怕别人卡,开头加个srand(time(0)),天知道你的程序什么时候会被CCF的机给编译,这样你说怎么卡……

顺便说一句,这个函数的常数蛮大的。

6

分别分析一下每一个东西:

①谁说这个图就联通了?
②树的性质,由于无环这个定理显然成立;
③哪有树没有叶节点的?就算这棵树就一个节点,它的度数也不大于 1 1 1啊!
④扯……

所以选②③。

7.

原来四堆卷子是 10 , 13 , 14 , 5 10,13,14,5 10,13,14,5,分一下,变成 10 + 13 = 23 10+13=23 10+13=23 14 + 5 = 19 14+5=19 14+5=19;然后在第一堆的 23 23 23个卷子中分一波,在第二堆中也分一波……

于是,至少会进行 42 + 23 + 19 = 84 42+23+19=84 42+23+19=84次份卷子的操作。

10.

每次链表都是在最前面的那个数的前面插,显然会进行 k k k不同节点的访问。

15.

可爱的NOI 2020……

阅读程序1

程序理解

一个用记忆化搜索来优化的递归。

题目详解

①显然错误,如果读入的 m m m就是个奇数,那递归的第一层 m m m不就是奇数了吗?

②显然正确。本来 m = 6 m=6 m=6,加的是上一行位置 0 , 2 , 4 0,2,4 0,2,4的值;现在改了,加的就是上一行位置 0 , 2 , 4 , 6 0,2,4,6 0,2,4,6的值,可能发生变化。

③正确。记忆化搜索只有优化复杂度的功能,绝对没有使程序正确的功能(这里的正确不包含"时间复杂度"或"空间复杂度"正确)

④考试的时候忘了……感谢洛谷给我查漏补缺的机会。于是瞎猜了一个,就对了……

这里一定要详解一下。

众所周知, m e m s e t memset memset有一个比较特殊的地方,即八位变一位。我们使用 m e m s e t ( a , 255 , s i z e o f ( a ) ) memset(a,255,sizeof(a)) memset(a,255,sizeof(a)),由于 255 = ( 11111111 ) 2 255=(11111111)_2 255=(11111111)2,这时我们相当于把整个数组中所有数都变成机器码 ( 11111111111111111111111111111111 ) 2 (11111111 11111111 11111111 11111111)_2 (11111111111111111111111111111111)2

由于这是机器码,所以第一位 1 1 1表示的负数,所以它是补码。根据补码的取反加一原则,真值为 − 1 -1 1

所以就相当于全部搞成 − 1 -1 1了……这个一定要搞清楚,之前没考过,今年我觉得要考

顺便说一句,如果这是 l o n g   l o n g long\ long long long的话,那仍然是 8 8 8位变 1 1 1位,但是变成了 64 64 64位数; s h o r t short short就是 16 16 16位数。容易挖坑

(5)自己推一波,答案是 B B B

(6)根据记忆化的特点,在这个 n × m n×m n×m的矩形中,每个位置最多被访问一次——同时,由于每求一个位置的 l u o luo luo值,它均扫描了上一行的许多数。

所以复杂度为 O ( n m × m ) O(nm×m) O(nm×m)= O ( m 2 n ) O(m^2n) O(m2n)

阅读程序2

程序理解

首先,通过 F l o y d Floyd Floyd跑出全源最短路。

然后,枚举两个不同的有序点对 ( i , j ) (i,j) (i,j);如果原图中没有这两个点连成的边,那么就把这条边添上去,边的长度为 1 1 1;否则,这条边的长度变成 0 0 0

然后,每次通过 i , j i,j i,j为桥梁,求出任意两个点之间最短路;然后再求出所有有序点对的最短路之和。假设对于 ( i , j ) (i,j) (i,j)这个最短路之和为 s u m sum sum,我们要求出对于所有的 ( i , j ) (i,j) (i,j)的这个 s u m sum sum的最小值。

题目详解

①显然错误。 k k k表示阶段,你换一下肯定错;还记得写 S T ST ST板子时我们犯的错误吗?

②显然错误。什么叫与 m m m无关?不是读入了 m m m条边吗?又有谁跟你说 n 2 n^2 n2 m m m是同级的?

③正确。显然无法得到正确结果。比如原图是一条链,每条边的长度都是 10000 10000 10000,这样不是就嗝屁了……

④正确。枚举 i , j i,j i,j为桥梁,与枚举 j , i j,i j,i为桥梁并没有多大顺序问题。

⑤自己推一波,答案是 A A A

⑥很显然的一个 F l o y d Floyd Floyd啊……这与生成树有什么关系……显然是一个三重循环,你说 D i j Dij Dij这么牛皮的复杂度方法要三重循环?一个优先队列加上一个枚举出边不就完事了……

阅读程序3

竟然错了两个选择题,我太菜了。

程序理解

先通过杨辉三角形的递推公式求出不同 i , j i,j i,j C i j C_{i}^j Cij

然后,通过二位前缀和,求出$sum_{i,j}=\sum_{ii=1}^i ∑ j j = 1 j A i , j \sum_{jj=1}^j A_{i,j} jj=1jAi,j

然后枚举输入 u , v u,v u,v,就可以愉快地直接输出 s u m u , v sum_{u,v} sumu,v的值啦。

题目详解

①显然错误。如果 i = j i=j i=j也是 0 0 0?你的意思是 C i i = 0 C_{i}^i=0 Cii=0,是吗?

②错误。我太菜了,考试的时候理解错了……这里的意思是 A i , j A_{i,j} Ai,j表示的是 A i j A_{i}^j Aij。显然错误,前面已经分析过了。

③错误。我太菜了,出了严重的错误……膜 M O D MOD MOD没看见?如果看见的话,本题就能选对了,可惜 O I OI OI的世界没有如果。

④显然正确,根据取膜的性质。

⑤选 C C C。自己算吧……考场上拿到试卷,还没有发现这个 1 ≤ i , j ≤ 100 1≤i,j≤100 1i,j100的锅的时候,差点因为要算 C 100 , 50 C_{100,50} C100,50 M O D MOD MOD而放弃本题……事实上很简单的,只需要输出 C 10 5 C_{10}^5 C105

⑥选 C C C。自己算一下吧,第 6 6 6题思维含量不大。

完善程序1

做这种题,绝对不能按照题号来逐个填,要按照主程序从上到下来填,记得带入语境就可以……

所以,一定要记得whk中做完型的时候老师提出的要求

④如果它没有关注任何人,直接干他丫的。

⑤之前已经处理过没关注人的……现在显然都无法在不影响其他人的条件下干人;于是,我们就处理所有未访问到的xxs,一一尝试干掉,选 C C C

①不管它有没有被干掉,先让它的关注者关注的人少一个,选 C C C

②这里填B。即,它的关注者要么没有关注别人,要么它自己没有被干掉,继续尝试"隔一个干一个"。

③根据②的思路,选 D D D

完善程序2

比较水,详解略掉。

猜你喜欢

转载自blog.csdn.net/Cherrt/article/details/108985361