专栏文章
题解:P13364 [GCJ 2011 Qualification] GoroSort
P13364题解参与者 8已保存评论 8
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @minikg2j
- 此快照首次捕获于
- 2025/12/02 03:00 3 个月前
- 此快照最后确认于
- 2025/12/02 03:00 3 个月前
题解
不妨假设策略最终排好序次数的期望存在,否则没有讨论的意义。
对于任何策略,考虑它一次对于一个排列的操作对不动点个数带来的影响。假定选取了 个位置,其中 个原本就是不动点, 个在排列后(这个位置)可能是不动点。根据期望的线性性,期望增加的不动点个数是 。且若每次选取所有未归位的点,这个数恰好是 。
直觉上每次减少不超过 那么一定至少要这么多次才能归位,可以用鞅来严谨化这一点。
考虑令 为表示 步之后未归位的点个数,则根据上文可以验证 是一个下鞅。定义停时 为第一次 的时候。(也就是排好序的时候)根据假设, 存在。并且,因为 ,有 恒成立。因此停时定理的条件成立!可以利用下鞅的停时定理得到 ,化简可得 ,而 表示初始未归位的点的个数。特别的,在策略“每次选取所有未归位的点”中,这个下鞅是一个鞅,等式取等。因此答案为 。
代码
PYTHONfor _ in range(int(input())):
n=int(input())
a=list(map(int,input().split()))
print('Case #%d: %d'%(_+1,sum(a[i]!=i+1 for i in range(n))))
相关推荐
评论
共 8 条评论,欢迎与作者交流。
正在加载评论...