NOIP2013 提高组复赛
day1
1002. 火柴排队
- 贪心+数据结构/归并排序
这个“相邻交换”让我联想到了NOIP2012_day1_task2_game那题的
恶心做法,于是就专注推导相邻两个元素交换对解的影响。然后根据以前经验知道一定有一个序列可以完全不动,而另一个序列只需要以第一列作为标准移动(所以样例解释反而给的误导很大)。于是很快就确信正解了。现在想起来还有一点小激动,自己居然能找出规律来。
首先,一定可以只对某一组的元素进行交换,能以给定的最少步数,得到另外一组的结果。显然当前序列还缺少k步就和另外一个序列相同时,另外一个序列一定也只需要k步就可以和当前序列相同。
其次,由于只能相邻交换,对于每一次的操作,它对于解的影响一定只与这一对元素有关。于是我们对相邻元素的数量关系进行推导:
假设有两组元素 ai,ai+1 和 bi,bi+1 ,如果有
(ai−bi)2+(ai+1−bi+1)2<(ai−bi+1)2+(ai+1−bi)2
则说明有 { bi,bi+1} 的顺序比 { bi+1,bi} 更优。对上述式子推导有:
2aibi+1+2ai+1bi<2aibi+2ai+1bi+1
ai(bi+1−bi)+ai+1(bi−