Возникли проблемы с логикой этой проблемы DSA (не удалось очистить большинство тестовых случаев).Python

Программы на Python
Anonymous
Возникли проблемы с логикой этой проблемы DSA (не удалось очистить большинство тестовых случаев).

Сообщение Anonymous »

алгоритм принимает входные данные в виде двоичной строки s, состоящей только из 0 и 1. За одну операцию можно выбрать любую «1» из строки и переместить ее вправо до тех пор, пока она не достигнет конца строки или другой «1». стоимость операции равна 1 + количество мест, на которые перемещается. Например, в строке "100010" первую можно переместить на три позиции вправо по стоимости 4. Примечание: обязательно переместить "1" на максимально возможную позицию вправо.
Для двоичной строки s найдите максимально возможное количество операций, позволяющих разделить данную строку.
Например. если s = «110100», последняя строка должна быть «000111». Оптимальным способом максимизировать количество операций будет:
  • Поменять местами второй и третий символы стоимостью 2. Строка станет «101100»
    Поменяйте местами первый и второй символы за 2. Строка станет «011100».
  • Наконец, мы перемещаем каждый из них в конец, т. е. перемещаем на 2 позиции. по цене 3 каждый.
Общая стоимость сегрегации равна 2 + 2 + 3 * 3 = 13
Нам нужно создать функцию, которая возвращает длинное целое число, обозначающее максимально возможную стоимость разделения данной строки.
Вот что я сделал в своей попытке, но не смог пройти большую часть теста случаи
def getMaxCost(s):
n = len(s)
cost = 0
ones = []

for i in range(n):
if s == "1":
ones.append(i)

total = len(ones)

for i in range(total):
target = n - (total - i)
cost += target - ones

return cost


Подробнее здесь: https://stackoverflow.com/questions/788 ... rity-of-th

Вернуться в «Python»