前言
一开始查排名的时候不知道为啥翻遍了排名榜都没找到。
后来才找到了?(94) 分竟然没找到,佩服佩服。
链接在这 ( ightarrow) 2020 洛谷初赛模拟
如果乐意直接看答案的话,公布一手:
ABCBA CABCB DBACD
FTTTBA
FFTTAA
FFFTCC
CDDAC
CBDCB
题解
单项选择题
第 (1) 题,首先符号位是 (1)(负数),其次 (124_{(10)} = 01110010_{(2)}),补码即为 (10001101),然后接上符号位是 (10001110). 选 (A).
第 (2) 题排除法,(ACD) 都是著名 ( ext{OJ}),选 (B).
第 (3) 题,考虑一个类似 ( ext{Cantor}) 的做法。
((B-A) * 26^2 + (Y-A) * 26^1 + (T-A) * 26^0 = 1319),然后 (1) 位的有 (26) 个,(2) 位的有 (26^2) 个,(1319+26+26^2 = 2021) 个。
所以编号为 (2022),选 (C).
第 (4) 题,我竟然错了 (frac{4096 * 2160 * 24 bit}{1024 * 1024 * 8} = 25MB)(物理上的等号,约等于)。选 (B).
第 (5) 题,本人也没搞懂是什么算法(后来知道是一个叫 nth_element
的东西)可以做到 (mathcal{O}(n)),但是好像没说能用算法解决,所以问题转化为四个复杂度最优的是哪个?选 (A).
第 (6) 题,((1)) 必然是错的,因为没有强调 连通图。((2)(3)) 都是对的,((4)) 也是错的。因为树是无向无环的。选 (C).
第 (7) 题,我也错了 其实这题类似于合并果子的最小代价,不过是反向的合并果子(拆分果子?),最优方案是:(42 = 15 + 27 = (10 + 5) + (13 + 14)),代价为 (42 + 15 + 27 = 84),选 (A).
第 (8) 题,根据先中遍历可以唯一确定树。
(H) 是根。然后按照题目的方法(即完全二叉树的存储方法,学过线段树的应该都知道),最大的 (E) 为 (13). 选 (B).
第 (9) 题,暴力题,不说了,选 (C).
第 (10) 题,最优的情况是,第一次查找的就是链表第一个元素,第 (i (i > 1)) 次查找的是第 (i-1) 次查找后插入的元素。(mathcal{O}(k)),选 (B).
第 (11) 题,可以枚举。
(A) | (B) | (C) |
---|---|---|
(5) | (1) | (0) |
(5) | (0) | (1) |
(4) | (2) | (0) |
(4) | (1) | (1) |
(4) | (0) | (2) |
(3) | (3) | (0) |
(3) | (2) | (1) |
(3) | (1) | (2) |
(3) | (0) | (3) |
(2) | (4) | (0) |
(2) | (3) | (1) |
(2) | (2) | (2) |
(2) | (1) | (3) |
(1) | (4) | (1) |
(1) | (3) | (2) |
(1) | (2) | (3) |
(0) | (4) | (2) |
(0) | (3) | (3) |
(18) 种,选 (D).
第 (12) 题,只有插入排序复杂度为 (mathcal{O}(n^2)). 选 (B).
第 (13) 题,大概像我这种出题比较多的造数据都会用到。
([a,b-1] ightarrow [0,b-a-1] + a ightarrow ext{rand()}\% ext{(b-a)} + a),选 (A).
第 (14) 题,完全图有 (7 imes 6 div 2 = 21) 条边,森林有 (7-1=6) 条边,删去 (15) 条,选 (C).
第 (15) 题,常识题,选 (D).
阅读程序题
第 (1) 篇
该程序的功能就是记忆化计算了 (gu) 函数的值。(gu) 没有应用意义。可以发现 (gu_{i,j} = gu_{i,j-1} (j \% 2 =0))
- 显然 (m) 是奇数不影响做法。(F).
- 会改变,因为那样会把 (=m) 的答案也加上了。(T)
- 删去记忆化的代码会增高时间复杂度,但不影响答案。(T).
- 显然,(T).
- 建立二维表即可,(B).
- 记忆化计算 (nm) 个值,每次计算复杂度为 (mathcal{O}(m)),所以为 (mathcal{O}(m^2n)),选 (a)。
第 (2) 篇
我也不知道这程序是干嘛的,题错了 (1) 个。???
不过 (f) 存的是最短路,老 ( ext{Floyd}) 家都知道。
- 老 ( ext{Floyd}) 家了,肯定影响答案。(F).
- 该程序复杂度为 (mathcal{O}(n^4 + m)),虽然 (m) 影响很小,但还是含有的。(F).
- (F) 数组最大为 (100 imes 10000 = 10^6),( ext{ans}) 最大约可达到 (10^6 imes 100 = 10^8),因此 (10^7) 不够大。(T).
- 显然不变,对 (x) 和 (y) 类似的松弛操作没有顺序。(T).
- 我是人工算的,(A).
- 都说了是 ( ext{Floyd}) 了,(A).
第 (3) 篇
写过 ( ext{NOIP2016 tg}) 组合数问题的人应该都知道,(A_{i,j} = C_i^j),( ext{sum}) 就是杨辉三角的前缀和。
- 显然,(i=j) 时为 (1),(F).
- 不是排列数,是组合数。可枚举验证。(F).
- 本来应该是对的,但是由于有模数,(1000) 之内的组合数远远大于 (19260817),可能出现加和模之后变小。(F).
- 没有溢出问题的话,这样写是对的。这个写法也常用来对负数取模。(T).
- (4) 分!(10) 以内的最大组合数为 (C_{10}^5 = 252),选 (C).
- 手算一下前缀和即可。答案为 (50),选 (C).
完善程序题
第 (1) 篇
理解程序的原理很重要,本人在第 (2) 小题也卡了一会儿。
该原理就是,可以建立树,(a_i) 为 (i) 的父亲。从不被关注的叶子节点开始,叶子节点首先枪毙。然后往上走,如果 当前节点不被枪毙 并且 没有人关注当前节点的父亲节点,则毙掉父亲节点。边也要断掉。
- 断边操作需要减掉一个度。选 (C).
- 只有不被关注的节点(叶子节点)才会被 ( ext{dfs}),选 (D).
- 很显然,对于一条链,分奇偶枪毙。选 (D).
- 毙掉叶子节点,选 (A).
- 最后出现的是没有访问过的节点,选 (C).
第 (2) 篇
显然,这道题是反向扫一遍,程序原理很简单。反向更新最小值和和,然后直接算、打擂就行。用栈记录最后的答案。
- 初始的和为 (s_n),选 (C).
- 统计和,选 (B).
- 计算除最小值以外的平均值。([i,n]) 共 (n-i+1) 个数,去掉最小值是 (n-i) 个,特此说明。选 (D).
- (k) 和 ( ext{cnt}) 维护的是栈。出现新的答案,应清空栈,然后加入当前的答案。选 (C).
- 同样的答案直接加入栈中,熟悉栈的操作。选 (B).