2020 CSP-J 初赛解析
直接说重点题吧,不耽误时间了
T5:
这个很显然就是让进这个 while 的次数尽可能少,
那么我们可以让他只进一次 while,即让第一次进 while 的时候就令 $FLAG = 1$
由于只进一次 while,那么只需要算第一次进的时候需要比较几次
很显然,n 个数需要比较 n-1 次
故答案为 C
T7:
由于有的元素可能不在这个链里面,即断开了连接,所以无法访问任意一个元素
并且 “随机访问一个元素” 指在 O(1) 的时间里访问该元素
链表的访问是O(n) 的
T14:
首先要注意,这个 “分配方案” 是看成不同班,同样的学生
那么这就是很明显的插板了,并且已经说明了每个班至少有一个名额,
所以答案就是 $C_{10-1}^{7-1} = 84$ 种分配方案
T15:
从这五副手套中取出两副,一共有 $C_5^2 = 10$ 种取法,
再随意配上两只手套 $C_{10-2\times2}^{6-2\times2} = C_6^4 = 15$ 种取法,
其中要去除掉这两只手套能配成一对的可能取法:$C_3^1 = 3$。
所以一共有 $C^3_5\times(C^2_6−C^1_3) = 120$ 种取法
T16就只能自己去模拟,将对应关系一一列出来,这玩意没啥好解析的
T17:
这是一个进制的题,算出来的 ans 是进位的次数
len 代表的是这个转化出来的数的数位长度,其中最高位存储在 a[len-1] 中
(1):这个 len 应该一直等于 $2$,不论 n 的值为几,
原因是在 i = 0 的时候必然会有一次进位,而进位之后 len 为 $2$,a[0] = 0,a[1] = 1
但是这时候 a[1] 本来也应该进一次位的,不过这个进位是 if ,不是 while,所以只会进行一次进位操作
(2):错误,当 n = 0 的时候,len = 1,此时 $len > n$
(3):正确,自己代数进去试试就知道了
(4):$10^15$,因为每次 ++d[0] 都会 进行一次 ++ans,所以 n 为几,ans 就是几、
(5):可以代入 9(即$3^2$)试试,最终得出的结果为 $4$ ,即 $\frac{3^2-1}{2}$
(6):自己看题解
T18
可以理解为 d[i][0] 是数列一, d[i][1] 是数列二
每次合并的价值为 数列一两数相加 与 数列二两数相减
求进行 n-1 次合并后的最大价值
(1):会直接数组都不输入,直接结束程序