#P9938. 交换的轮数

交换的轮数

交换的轮数

题目描述

给定一个只由 0011 构成序列,不断扫描序列,在每一轮扫描的过程中,如果发现有一些 1100 相邻,且 11 在前,00 在后,就在这一轮扫描后,同时将这些 11 与相邻的 00 交换。不断进行调整直到将所有的 00 都在序列的前一半,所有的 11 都在序列的后一半为止。

请计算需要进行多少轮交换才能完成调整。

输入格式

  • 一个由若干 01 字符组成的序列。

输出格式

  • 单个整数:表示交换的次数。

数据范围

  • 对于 30%30\% 的数据,1n201 \leq n \leq 20
  • 对于 60%60\% 的数据,1n50001 \leq n \leq 5000
  • 对于 100%100\% 的数据,1n300,0001 \leq n \leq 300,000

样例数据

输入:

1100

输出:

3

在这个例子中,每一轮扫描将进行如下操作:

  1. 第一轮将 1100 变为 1001 (进行一次交换)
  2. 第二轮将 1001 变为 0101 (进行一次交换)
  3. 第三轮将 0101 变为 0011 (进行一次交换)

总共需要三轮交换来完成所有的 00 在前和所有的 11 在后的目标。