CSP-S1 2020 A卷 官方答案&简要解析
Starlight237 · · 个人记录
注:尚未完成
来源:官方答案&U裙的讨论。有争议的题本文一律按官方答案。
Part 1 单项选择
CBBBD BAACC CDBDC(比较显然)
Part 2 阅读程序
Code 1
FFTTCC
求不相等的
判断题显然。单选第一道构造即可。
第二道,当且仅当
Code 2
FTXBAD
注:Code2 判断第二题有争议,第三题(是个单选)正确答案应该是
nth_element 的一种实现。
注意,此题期望情况下的计算应该每次分界线取中点。
判断题第一道显然,判断第二道和单选第三道的争议问题建议去看UOJ裙讨论。判断第二道当L和R相等时可能会出问题。
4和6都可以手推,需要注意一下两个 while 循环中带不带等号的问题。
5的期望复杂度用主定理第三种情形或者等比数列求和即可,复杂度递推式
实际上n方的情形都是把
Code 3
TFFDDC
双向bfs。
此题的意义是给定两个字符串,给一个分界线 rtol 的轮换操作,ltor 的轮换操作,问第一个字符串需要几次变换才能成为第二个字符串。由于 ltor 和 rtol 两个函数十分容易看懂,这里就不讲了。
- 输出可能为0,显然是对的
- 关键观察:
ltor和rtol是互逆操作,且周期相等。知道这一点就显然了。 - 应该是
O(n(n!)^2) 。 - m=0时,只有一个合法的轮换操作,显然不可能能翻转数组,显然-1。
- 可以通过猜想/构造看出来是
O(n^2) 的,于是待定系数法/拉格朗日插值/爆算/直接推导即可。 - 观察逆序对的奇偶性,也比较显然
然而我考场上写错了
Part 3 完善程序
Code 1
DBDDB
裸贪心,没啥好讲的
Code 2
DBCAB
- lowbit 的一些奇奇怪怪的写法
- 取出高位,显然B
- 最劣情况的答案是0,也就是啥都不选
- 根据题意推即可
- 根据题意推即可