CF1531E2.Сортировка слиянием

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Рассмотрим следующий код сортировки слиянием на языке Python:

def sort(a):  n = len(a)  b = [0 for i in range(n)]  log = []  def mergeSort(l, r):    if r - l <= 1:      return    m = (l + r) >> 1    mergeSort(l, m)    mergeSort(m, r)    i, j, k = l, m, l    while i < m and j < r:      if a[i] < a[j]:        log.append('0')        b[k] = a[i]        i += 1      else:        log.append('1')        b[k] = a[j]        j += 1      k += 1    while i < m:      b[k] = a[i]      i += 1      k += 1    while j < r:      b[k] = a[j]      j += 1      k += 1    for p in range(l, r):      a[p] = b[p]  mergeSort(0, n)  return "".join(log)

Как можно заметить, этот код использует логирование — важнейший инструмент разработки.

Старший разработчик ВКонтакте Вася сгенерировал перестановку aa (массив из nn различных целых чисел от 11 до nn), дал её на вход функции sort и получил на выходе строку ss. На следующий день строку ss Вася нашёл, а перестановка aa потерялась.

Вася хочет восстановить любую перестановку aa такую, что вызов функции sort от неё даст ту же строку ss. Помогите ему!

考虑以下用 Python 编写的归并排序代码:

def sort(a):  n = len(a)  b = [0 for i in range(n)]  log = []  def mergeSort(l, r):    if r - l <= 1:      return    m = (l + r) >> 1    mergeSort(l, m)    mergeSort(m, r)    i, j, k = l, m, l    while i < m and j < r:      if a[i] < a[j]:        log.append('0')        b[k] = a[i]        i += 1      else:        log.append('1')        b[k] = a[j]        j += 1      k += 1    while i < m:      b[k] = a[i]      i += 1      k += 1    while j < r:      b[k] = a[j]      j += 1      k += 1    for p in range(l, r):      a[p] = b[p]  mergeSort(0, n)  return "".join(log)

如您所见,该代码使用了日志记录——这是开发中至关重要的工具。

VK 高级开发工程师瓦夏生成了一个排列 aa(即由 11 到 nn 的 nn 个互不相同整数组成的数组),将其作为输入传入函数 sort,并得到了输出字符串 ss。第二天,瓦夏找到了字符串 ss,但排列 aa 却丢失了。

瓦夏希望恢复出任意一个排列 aa,使得对该排列调用函数 sort 后得到的输出字符串恰好为 ss。请帮助他!

输入格式

Ввод содержит непустую строку ss, состоящую из символов 0 и 1.

В этой версии задачи для любого теста существует перестановка длины не более 10310^3, удовлетворяющая условию. Тем не менее, ваш ответ может иметь любую длину, в том числе превышающую 10310^3.

输入包含一个非空字符串 ss,该字符串仅由字符 0 和 1 组成。

在本题版本中,对于任意测试用例,均存在一个长度不超过 10310^3 的排列满足题目条件。然而,您的答案可以是任意长度(包括超过 10310^3)。

输出格式

В первой строке выведите целое число nn — длину перестановки.

Во второй строке выведите nn различных целых чисел a0,a1,…,an−1a_0, a_1, \ldots, a_{n-1} (1≤ai≤n1 \le a_i \le n) — элементы перестановки.

Если существует несколько вариантов ответа, выведите любой из них.

第一行输出一个整数 nn — 排列的长度。

第二行输出 nn 个互不相同的整数 a0,a1,…,an−1a_0, a_1, \ldots, a_{n-1}(1≤ai≤n1 \le a_i \le n)— 排列的元素。

如果存在多个正确答案,输出任意一个即可。

输入输出样例

  • 输入#1

    00000000000000000000000000000000

    输出#1

    16
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  • 输入#2

    11111111111111111111111111111111

    输出#2

    16
    16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
  • 输入#3

    101011010001100100011011001111011000011110010

    输出#3

    16
    13 6 1 7 12 5 4 15 14 16 10 11 3 8 9 2

输入解题思路,AI测评打分。不知道怎么写?

首页