1 条题解
-
0
猜排列(easy)
算法思路
先确定一个位置的值,再利用两数之和恢复其他位置。
首先询问 、、,分别得到
$$s_{12}=a_{1}+a_{2},\qquad s_{13}=a_{1}+a_{3},\qquad s_{23}=a_{2}+a_{3}.$$将前两个回答相加,再减去第三个回答,可以消去 :
因此,前三个位置的值为
$$a_{1}=\frac{s_{12}+s_{13}-s_{23}}{2},\qquad a_{2}=s_{12}-a_{1},\qquad a_{3}=s_{13}-a_{1}.$$对于每个 ,询问 。设回答为 ,则 。恢复所有位置后,输出整个排列。
正确性证明
前三次询问的回答满足上述等式,因此计算得到的 均为真实值。
对于其余位置 ,询问返回 。由于 已被正确确定,故 恰好等于真实的 。
因此,算法能够正确恢复整个排列。
复杂度分析
前三个位置使用 次询问,其余 个位置各使用一次询问,总询问次数为
满足题目限制。
时间复杂度为 ,存储整个排列的空间复杂度为 。
- 1
信息
- ID
- 715
- 时间
- 1000ms
- 内存
- 256MiB
- 题目 Rating
- 标签
- (无)
- 递交数
- 42
- 已通过
- 13
- 上传者