#P5918. [FJOI2015] 金币换位问题

[FJOI2015] 金币换位问题

题目描述

给定一个 nn,最开始序列长这样:

$$\underbrace{\tt 111\cdots11}_{n \text{ 个 } 1}\underbrace{\tt 000\cdots00}_{n \text{ 个 } 0}\verb!__! $$

现在要求用最少的交换步数,使得最终的序列为

$$\underbrace{\tt 101010\cdots 1010}_{2\times n \text{ 个 } 01 \text{ 交替排列}}\verb!__! $$

所谓交换是指将相邻两个非空格的数一起挪到两个空格上

例如,下面是 n=4n=4 时的一组合法解:

  • 初始状态:11110000__\verb!11110000__!
  • 11 步:__11000011\verb!__11000011!
  • 22 步:101__00011\verb!101__00011!
  • 33 步:1010100__1\verb!1010100__1!
  • 44 步:10101__001\verb!10101__001!
  • 55 步:10101010__\verb!10101010__!

可以证明,最少的操作次数就是 55 步。

输入格式

输入共一行一个整数 nn

输出格式

第一行输出最少移动步数。

接下来一行为移动方案,只要输出被移动的两个非空格格子左边那个的编号。详见样例。

4
5
1 4 8 6 9

提示

对于 100%100\% 的数据,2<n2×1052<n\le 2\times 10^5