Тема 27. Программирование – оптимизация по времени и по памяти
27.02 Мусорки, кольцевая дорога
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование – оптимизация по времени и по памяти
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#40156

Задание выполняется с использованием прилагаемых файлов

В городе M  расположена исследовательская лаборатория, сейсмографические датчики которой размещены на окружности на равном расстоянии друг от друга. Каждый датчик несколько раз в сутки отправляет сигнал в центр обработки данных. Количество энергии, необходимое для передачи одного сигнала, равно квадрату расстояния от датчика до ЦОД, умноженному на количество сигналов. Рядом с каким датчиком следует разместить центр обработки данных, чтобы энергия, расходуемая на передачу данных от всех датчиков, была минимальной? В качестве ответа укажите все варианты затрат энергии для всех возможных позиций размещения ЦОДа.

Входные данные:

В первой строке входного файла находятся два числа: N  — количество датчиков (1 ≤ N ≤ 10000000  ) и R  — расстояние между соседними датчиками (1 ≤ R ≤ 1000  ). Каждая из следующих N  строк содержит одно натуральное число, не превышающее 1000  — количество сигналов, отправляемых датчиком за сутки.

Выходные данные:

n чисел — варианты затрат энергии для всех возможных позиций размещения ЦОДа.

В ответе укажите все варианты затрат энергии для всех возможных позиций размещения ЦОДа через пробел.

Вложения к задаче
Показать ответ и решение

Пункт А

f = open(’1.txt’)
n, r = [int(x) for x in f.readline().split()]
a = [int(i) for i in f]
cost = [0] * n
for i in range(0, n):
    for j in range(0, n):
        cost[i] += (min(abs(i - j), n - abs(i - j)) * r) ** 2  * a[j]
print(*cost)

Пункт Б

f = open(’27A.txt’)
n, r = map(int, f.readline().split())
p = n//2
s = [0]*n
a = []
for i in range(n):
    a.append(int(f.readline()))
for i in range(p):
    s[0] += a[i]
for i in range(1, n):
    s[i] = s[i - 1]-a[i - 1]+a[(i - 1 + p) % n]
vvs = [0]*n
for i in range(p):
    vvs[0] += a[i]*(2 * p - 2 * i - 1)
for i in range(1, n):
    vvs[i] = vvs[i - 1] - a[i - 1] * \
        (2 * p - 1) + 2 * s[i] - a[(i - 1 + p) % n]
uvs = [0]*n
for i in range(p):
    uvs[0] += a[i]*(2 * i + 1)
for i in range(1, n):
    uvs[i] = uvs[i - 1] - a[i - 1] + a[(i - 1 + p) % n] * (2*p + 1) - 2 * s[i]
cost = [0]*n
for j in range(n):
    cost[0] += a[j]*(min(j, n - j)*r)**2
for i in range(1, n):
    cost[i] = cost[i-1] + vvs[(i-p) % n]*r**2 - uvs[i]*r**2
print(*cost)

Ответ: 328 476 552 412 392 348

Ошибка.
Попробуйте повторить позже

Задача 2#40155

Стоимость доставки фантиков равно произведению количества фантиков на квадрат расстояния от сборщика до мусорки.

Дано число n  — количество мусорок, расположенных по кругу, затем n  чисел — количество фантиков в каждой мусорке. Требуется найти все убывающие взвешенные суммы для всех начальных позиций пункта сбора. Убывающей взвешенной суммой является сумма членов, имеющих вид a[i]⋅(2∗(n∕∕2 − 1− i) + 1)  , где a[i]  — i-ое число фантиков, значение i проходит половину круга относительно своей стартовой позиции.

Вывести все эти числа от 1  до            9
n(1 ≤ n ≤ 10)  .

Для n = 4  и чисел 10  , 3  , 5  , 4  получатся следующие убывающие взвешенные суммы:

10⋅3 + 3⋅1 = 33  ,

3⋅3 + 5⋅1 = 14  ,

5⋅3 + 4⋅1 = 19  ,

4⋅3 + 10⋅1 = 22

Вложения к задаче
Показать ответ и решение
f = open("3.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
s = [0] * n
s[0] = sum(a[:n // 2])
for i in range(1, n):
    s[i] = s[i - 1] - a[i - 1] + a[(i + n // 2 - 1) % n]

u = [0] * n

#База. Посчитали первую убывающую
#взвешенную сумму
for i in range(n // 2):
    t = n//2 - 1 - i
    u[0] += a[i] * (2*t + 1)

#Пересчитываем все остальные
for i in range(1, n):
    u[i] = u[i - 1] + 2*s[i] - a[(i - 1 + n // 2) % n] - a[i - 1]  * (2 * (n//2 - 1 - 0) + 1)

print(*u)

Ответ: 1400 2300 3200 4100 4400 3500

Ошибка.
Попробуйте повторить позже

Задача 3#40154

Стоимость доставки фантиков равно произведению количества фантиков на квадрат расстояния от сборщика до мусорки.

Дано число n  — количество мусорок, расположенных по кругу, затем n  чисел — количество фантиков в каждой мусорке. Требуется найти все возрастающие взвешенные суммы для всех начальных позиций пункта сбора. Возрастающей взвешенной суммой является сумма членов, имеющих вид a[i]⋅(2⋅i+ 1)  , где a[i]  — i-ое число фантиков, значение i проходит половину круга относительно своей стартовой позиции.

Вывести все эти числа от 1  до            9
n(1 ≤ n ≤ 10)  .

Для n = 4  и чисел 10  , 3  , 5  , 4  получатся следующие возрастающие взвешенные суммы:

10⋅1 + 3⋅3 = 19  ,

3⋅1 + 5⋅3 = 18  ,

5⋅1 + 4⋅3 = 17  ,

4⋅1 + 10⋅3 = 34

Вложения к задаче
Показать ответ и решение
f = open("2.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
s = [0] * n
s[0] = sum(a[:n // 2])
for i in range(1, n):
    s[i] = s[i - 1] - a[i - 1] + a[(i + n // 2 - 1) % n]

v = [0] * n

#База. Посчитали первую возрастающую
#взвешенную сумму
for i in range(n // 2):
    v[0] += a[i] * (2*i + 1)

#Пересчитываем все остальные
for i in range(1, n):
    v[i] = v[i - 1] - 2*s[i - 1] + a[i - 1] + a[(i - 1 + n//2) % n] * ((n//2 - 1)*2 + 1)

print(*v)

Ответ: 2200 3100 4000 4900 2800 1900

Ошибка.
Попробуйте повторить позже

Задача 4#40153

Стоимость доставки фантиков равно произведению количества фантиков на квадрат расстояния от сборщика до мусорки.

Дано число n  — количество мусорок, расположенных по кругу, затем n  чисел — количество фантиков в каждой мусорке. Какова будет суммарная стоимость доставки фантиков, если расположить пункт сбора в самом начале?

Вложения к задаче
Показать ответ и решение
f = open("1.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]

cost = 0
for i in range(n):
    cost += a[i]*(min(i, n - i) ** 2)

print(cost)

Ответ: 859

Ошибка.
Попробуйте повторить позже

Задача 5#38854

На кольцевой автодороге с двусторонним движением находится N  многоэтажных жилых домов (не более одного дома на каждом километре дороги). Длина кольцевой автодороги равна K  км. Нулевой километр и K  -й километр находятся в одной точке. Жители домов ежедневно получают почту, которую доставляют роботы-почтальоны. Почта упакована в доставочные пакеты, каждый из которых вмещает не более V  кг посылок или писем. Каждый доставочный пакет используется для доставки почты только в один жилой дом, при этом в каждый дом может быть доставлено не более одного пакета с неполной загрузкой. Известно, что заряд аккумулятора робота-почтальона позволяет ему проходить не более M  км, заряд аккумулятора для возвращения робота в почтовое отделение не учитывается. Почтовое отделение открыли в одном из домов таким образом, чтобы количество доставляемых пакетов с корреспонденцией было максимальным. Почта в те дома, которые находятся на расстоянии более M  от почтового отделения, не доставляется. Определите необходимое количество доставочных пакетов в этом почтовом отделении.

Входные данные:

В первой строке стоят числа N,K, V  и M  (1 < N < 10000000,1 < K < 10000000,1 < V < 10000,1 < M < 10000000)  — количество жилых домов, длина кольцевой автодороги в километрах и максимальное расстояние, на которое робот может осуществлять доставку почтовых отправлений.

В каждой из следующих N  строк находятся два числа: номер километра кольцевой автодороги, на котором расположен жилой дом, и вес ежедневной корреспонденции (все числа натуральные, вес писем и посылок для каждого дома не превышает 1000 кг). Данные указаны в порядке расположения домов на автодороге.

Пример входных данных:

5  11  3  3

1  8

3  7

5  6

7  5

9  3

При таких исходных данных оптимальное расположение почтового отделения – в доме с номером 3. В этом случае количество пакетов для доставки корреспонденции составит: 3 (для дома 1) + 3 (для дома 3) + 2 (для дома 5) = 8. В дома 7 и 9 почту доставить не удаётся.

В ответе укажите два числа: сначала искомое значение для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение
f = open(’27b.txt’)
n, k, v, m = list(map(int, f.readline().split()))
a = [0] * k

for i in range(n):
    kilometer_num, pochta = list(map(int, f.readline().split()))
    a[kilometer_num % k] = pochta // v + (pochta % v > 0)

min_s = sum(a)
if m < (k + 1) // 2 - 1:
    c = sum(a[:m*2 + 1])
    if a[m]:
        min_s = c
    else:
        min_s = 0

    for i in range(1, k):
        c += a[(i + m * 2) % k] - a[i - 1]
        if a[(i + m) % k]:
            min_s = max(min_s, c)

print(min_s)

Ответ: 1202 70082

Ошибка.
Попробуйте повторить позже

Задача 6#38853

На кольцевой автодороге с двусторонним движением находится N  заправочных станций. Длина кольцевой автодороги равна K  км, нулевой километр и K  -й километр находятся в одной точке. Код заправочной станции совпадает с расстоянием этой станции до нулевой отметки дороги в километрах. На заправочные станции нужно ежедневно доставлять бензин из бензохранилища, которое требуется разместить рядом с одной из заправочных станций. Бензин поставляется в цистернах объёмом V  м3 каждая, затраты на доставку вычисляются как произведение расстояния на количество цистерн, которые требуются для полной заправки бензоколонок станции (для каждой станции нужно своё количество цистерн, лишь одна цистерна может быть заполнена не полностью). За один рейс бензовоз доставляет бензин только на одну заправочную станцию. Бензохранилище расположено так, чтобы суммарные затраты на доставку бензина были минимальными. Определите минимально возможные суммарные затраты на доставку бензина.

Входные данные:

Первая строка содержит три числа N  , K  и V  (1 < N < 10000000,1 < K < 10000000,1 < V < 1000)  — количество заправочных станций, длина кольцевой автодороги в километрах и объём цистерны.

В каждой из следующих N  строк находятся два числа: номер километра кольцевой автодороги, на котором расположена заправочная станция, и количество бензина, которое нужно туда доставить (все числа натуральные). Заправочные станции перечисляются в порядке их расположения на автодороге.

Пример входных данных:

5  11  3

1  8

3  7

5  6

7  5

9  3

При таких исходных данных лучше всего расположить бензохранилище около заправочной станции с кодом 3. При этом затраты на доставку бензина составят 2⋅3+ 2 ⋅2 + 4⋅2+ 5 ⋅1 = 23  .

В ответе укажите два числа: сначала искомое значение для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение
f = open(’27b.txt’)
n, k, v = map(int, f.readline().split())
a = [0] * k

k_del, ost  = k // 2, k % 2

for i in range(n):
    kilometer_num, kolvo = map(int, f.readline().split())
    a[kilometer_num % k] = kolvo // v + (kolvo % v > 0)

min_sum = 10**25
s = 0
# Считаем минимальную сумму доставки, если завод стоит на нулевом километре
for i in range(1, k):
    s += a[i] * (2*k_del + ost - abs(2*(i-k_del) - ost)) // 2

d = a[0] + sum(a[k_del + 2:k]) - sum(a[1:k_del + 1])

for i in range(1, k):
    s += d
    d += 2 * a[i] - a[(k_del + i) % k] - a[(k_del + i + ost) % k]
    min_sum = min(min_sum, s)
print(min_sum)

Ответ: 1444502 455926219426

Ошибка.
Попробуйте повторить позже

Задача 7#38852

В городе M  расположена кольцевая автодорога длиной в N  километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги в одном из пунктов сборки мусора собираются поставить мусороперерабатывающий завод таким образом, чтобы стоимость доставки мусора была минимальной. Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым. Контейнеры нумеруются с 1  до N  .

Рядом с каким пунктом сбора мусора нужно поставить мусороперерабатывающий завод?

Входные данные:

Первое число N  — количество контейнеров для мусора. Последующие N  чисел — количество килограмм мусора, которое производится на точке.

Выходные данные:

Одно число — номер контейнер для мусора рядом с которым стоит расположить перерабатывающий завод.

Пример входных данных:

6

8

20

5

13

7

19

Для данного примера ответ — 6 (7⋅1 + 13⋅2+ 5 ⋅3 + 20⋅2+ 8 ⋅1+ 19⋅0).

Вложения к задаче
Показать ответ и решение
f = open(’3B.txt’)
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]

summa = sum(a)
s = [0]*n
s[0] = sum(a[0:n//2])
for i in range(1,n):
    s[i] = s[i-1]-a[i-1]+a[((i-1)+n//2)%n]

p = [0]*n
for i in range(n):
    p[i] = summa-s[i]

price = [0]*n
for i in range(n//2):
    price[0]+=a[i]*i
for i in range(n//2,n):
    price[0]+=a[i]*(n-i)

mi = 10**20
number = -1
for i in range(1,n):
    price[i] = price[i-1] - s[i] + p[i]
    if price[i]<mi:
        mi = price[i]
        number = i+1
print(number)

Ответ: 15 999980

Ошибка.
Попробуйте повторить позже

Задача 8#38851

В городе M  расположена кольцевая автодорога длиной в N  километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги около k  -ого пункта сборки мусора поставили мусороперерабатывающий завод. Стоимость доставки мусора вычисляется как вместимость пункта сбора, умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора, расстояние считается нулевым. Контейнеры нумеруются с 1 до N  . Требуется найти модуль разницы стоимостей сбора всего мусора при перемещении завода с k  -ой позиции контейнера на k+ 1  (при k = N  , (k + 1)  -ая позиция соответствует 1 позиции контейнера).

Описание входных данных:

Первое число N  — количество контейнеров для мусора, второе число k  - номер контейнера для мусора, рядом с которым стоит перерабатывающий завод. Последующие N чисел — количество килограмм мусора, которое производится на точке.

Вложения к задаче
Показать ответ и решение
file = open(’27-1.txt’)
n = int(file.readline())
k = int(file.readline()) - 1
a = [int(file.readline()) for i in range(n)]
s = [sum(a[0:n // 2])]
for i in range(1, n):
    s.append(s[i - 1] - a[i - 1] + a[(i - 1 + n // 2) % n])

summa = sum(a)
p = []
for i in range(n):
    p.append(summa - s[i])

# ищем стоимость, если завод стоит на
# k-ой позиции
price = 0
for i in range(1, n):
    price += min(i, n - i) * a[(i + k) % n]

# найдем k+1 стоимость
new_price = price - s[(k + 1) % n] + p[(k + 1) % n]
print(abs(price - new_price))

Ответ: 800575

Ошибка.
Попробуйте повторить позже

Задача 9#38850

В городе M  расположена кольцевая автодорога длиной в N  километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги в одном из пунктов сборки мусора собираются поставить мусороперерабатывающий завод таким образом, чтобы стоимость доставки мусора была минимальной.

Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым.

Контейнеры нумеруются с 1 до N  . Рядом с каким пунктом сбора мусора нужно поставить мусороперерабатывающий завод?

Описание входных данных:

Первое число N  — количество контейнеров для мусора. Последующие N  чисел — количество килограмм мусора, которое производится на точке.

Описание выходных данных:

Одно число — номер контейнера для мусора рядом с которым стоит расположить перерабатывающий завод.

Вложения к задаче
Показать ответ и решение
file = open(’1.txt’)
n = int(file.readline())
a = [int(file.readline()) for i in range(n)]
s = [sum(a[0:n // 2])]
for i in range(1, n):
    s.append(s[i - 1] - a[i - 1] + a[(i - 1 + n // 2) % n])

summa = sum(a)
p = []
for i in range(n):
    p.append(summa - s[i])

price = 0
for i in range(n // 2):
    price += i * a[i]
for i in range(n // 2, n):
    price += (n - i) * a[i]

minim = price
min_k = -1
for i in range(1, n):
    price -= s[i]
    price += p[i]
    if price < minim:
        minim = price
        min_k = i + 1
print(min_k)

Ответ: 98312

Ошибка.
Попробуйте повторить позже

Задача 10#37645

У медицинской компании есть N  пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Пробирки перевозят в специальных транспортировочных контейнерах вместимостью V  пробирок. Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в лаборатории. Компания планирует открыть лабораторию в одном из пунктов. Стоимость перевозки биоматериалов равна произведению расстояния от пункта до лаборатории на количество контейнеров с пробирками. Общая стоимость перевозки за день равна сумме стоимостей перевозок из каждого пункта в лабораторию. Лабораторию расположили в одном из пунктов приёма биоматериалов таким образом, что общая стоимость доставки биоматериалов из всех пунктов минимальна. Определите минимальную общую стоимость доставки биоматериалов из всех пунктов приёма в лабораторию.

Входные данные:

Даны два входных файла — A  и B  , каждый из которых содержит в первой строке число N  (1 ≤ N ≤ 10000000  ) – количество пунктов приёма биоматериалов, и число V  (1 ≤ V ≤ 1000  ) – вместимость транспортировочного контейнера. Каждая из следующих N  строк содержит два натуральных числа: номер пункта и количество пробирок (не превышающее 10000). Пункты перечислены в произвольном порядке.

Пример входного файла:

6 96

5 4

7 3

1 100

10 190

2 200

8 2

При таких исходных данных (вместимость транспортировочного контейнера равна 96 пробирок) компании выгодно открыть лабораторию в пункте 2. В том случае сумма транспортных затрат составит 1⋅2+ 3 ⋅1+ 5⋅1 + 6⋅1+ 8 ⋅2 = 32  . Ответ: 32.

Вложения к задаче
Показать ответ и решение

Неэффективное решение

f = open(’27_A.txt’)
n, v = map(int, f.readline().split())
a = []
for i in range(n):
    s, k = map(int, f.readline().split())
    # кол-во сумок
    if k % v == 0:
        c = k//v
    else:
        c = k//v + 1
    a.append([s, c])
a.sort()

min_sum = 10**20
for i in range(n):
    new_sum = 0
    for j in range(n):
        new_sum += abs(a[i][0]-a[j][0])*a[j][1]
    min_sum = min(min_sum, new_sum)

print(min_sum)

Ээффективное решение

f = open(’27_B.txt’)
n, v = map(int, f.readline().split())
a = []
for i in range(n):
    s, k = map(int, f.readline().split())
    # кол-во сумок
    if k % v == 0:
        c = k//v
    else:
        c = k//v + 1
    a.append([s, c])
a.sort()

# префиксные суммы количества сумок в первых n пунктах
bags = [0]*n
bags[0] = a[0][1]
for i in range(1,n):
    bags[i] = bags[i-1] + a[i][1]

#стоимость доставки в нулевом пункте
s = 0
for j in range(n):
  s += abs(a[0][0]-a[j][0])*a[j][1]

min_sum = s
for i in range(1,n):
    diff = a[i][0] - a[i-1][0] #расстояние между двумя пунктами
    #Пересчет суммы
    #для предыдущих пунктов дороже, для следующих дешевле
    s = s + diff*bags[i-1] - diff*(bags[n-1]-bags[i-1])
    #Пересчет минимума
    min_sum = min(min_sum,s)

print(min_sum)

Ответ: 128822 6201378713

Ошибка.
Попробуйте повторить позже

Задача 11#36826

В городе M  расположена кольцевая автодорога длиной в 3⋅N  километров с движением в обе стороны. На каждом третьем километре установлены контейнеры для мусора. Нулевой километр и 3N  -й километр автодороги находятся в одной точке. Известно количество мусора, которое накапливается ежедневно в каждом из контейнеров. Из каждого пункта мусор вывозит отдельный мусоровоз. Стоимость доставки мусора вычисляется как произведение количества мусора на расстояние от пункта до центра переработки. Центр переработки отходов открыли в одном из пунктов сбора мусора таким образом, чтобы общая стоимость доставки мусора из всех пунктов в этот центр была минимальной.

Определите минимальные расходы на доставку мусора в центр переработки отходов.

Описание входных данных:

Первое число N  — количество контейнеров для мусора. Последующие N  чисел — количество килограмм мусора, которое производится на точке.

Описание выходных данных:

Одно число — минимальные расходы на доставку мусора в центр переработки отходов.

В ответе укажите два числа: сначала значение искомой величины для файла A  , затем — для файла B  .

Вложения к задаче
Показать ответ и решение
f = open("7B.txt")
n = int(f.readline())
a = [int(f.readline())*3 for i in range(n)]
s = [0] * n
sum = 0
right, left = 0, 0

for i in range(1, n // 2):
    sum += a[i] * i + a[n - i] * i
    right += a[i]
    left += a[n - i]

sum += a[n // 2] * n // 2
s[0] = sum
for i in range(1, n):
    s[i] = s[i - 1] + left + a[i - 1] - right - a[(i + (n // 2) - 1) % n]
    right = right - a[i] + a[(i + (n // 2) - 1) % n]
    left = left - a[(i + (n // 2)) % n] + a[i - 1]
print(min(s))

Ответ: 7932 2323961620665

Ошибка.
Попробуйте повторить позже

Задача 12#36825

В городе M  расположена кольцевая автодорога длиной в N  километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги в одном из пунктов сборки мусора собираются поставить мусороперерабатывающий завод таким образом, чтобы стоимость доставки мусора была минимальной. Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым. Контейнеры нумеруются с 1  до N  . Рядом с каким пунктом сбора мусора нужно поставить мусороперерабатывающий завод?

Описание входных данных:

Первое число N  — количество контейнеров для мусора. Последующие N  чисел — количество килограмм мусора, которое производится на точке.

Описание выходных данных:

Одно число — номер контейнера для мусора рядом с которым стоит расположить перерабатывающий завод.

В ответе укажите два числа: сначала значение искомой величины для файла A  , затем — для файла B  .

Вложения к задаче
Показать ответ и решение
f = open("6A.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
s = [sum(a[0:n // 2])]
for i in range(1, n):
    s.append(s[i - 1] - a[i - 1] + a[(i + n // 2 - 1) % n])

summa = sum(a)
p = []
for i in range(n):
    p.append(summa - s[i])

price = 0
for i in range(n // 2):
    price += i * a[i]
for i in range(n // 2, n):
    price += (n - i) * a[i]

minim = price
min_k = 1
for i in range(1, n):
    price -= s[i]
    price += p[i]
    if price < minim:
        minim = price
        min_k = i + 1
print(min_k)

Ответ: 5 39250

Ошибка.
Попробуйте повторить позже

Задача 13#36824

В городе M  расположена кольцевая автодорога длиной в N  километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги около k  -ого пункта сборки мусора поставили мусороперерабатывающий завод. Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым. Контейнеры нумеруются с 1  до N  . Требуется найти модуль разницы стоимостей сбора всего мусора при перемещении завода с k  -ой позиции контейнера на k+ 1  (при k = N  , (k + 1)  -ая позиция соответствует 1 позиции контейнера).

Описание входных данных:

Первое число N  — количество контейнеров для мусора, второе число k  — номер контейнера для мусора рядом с которым стоит перерабатывающий завод. Последующие N  чисел — количество килограмм мусора, которое производится на точке.

Описание выходных данных:

Одно число — модуль разницы стоимостей сбора мусора при перемещении завода с k  -ой позиции контейнера на    k + 1  (при k = N  , (k + 1)  -ая позиция соответствует 1  позиции контейнера).

В ответе укажите два числа: сначала значение искомой величины для файла A  , затем — для файла B  .

Вложения к задаче
Показать ответ и решение
f = open("5A.txt")
n = int(f.readline())
k = int(f.readline()) - 1
a = [int(f.readline()) for i in range(n)]
s = [sum(a[0:n // 2])]
for i in range(1, n):
    s.append(s[i - 1] - a[i - 1] + a[(i - 1 + n // 2) % n])

summa = sum(a)
p = []
for i in range(n):
    p.append(summa - s[i])

# ищем стоимость, если завод стоит на
# k-ой позиции
price = 0
for i in range(1, n):
    price += min(i, n - i) * a[(i + k) % n]

# найдем k+1 стоимость
new_price = price - s[k + 1] + p[k + 1]
print(abs(price - new_price))

Ответ: 300 64769

Ошибка.
Попробуйте повторить позже

Задача 14#36823

Дано число n  — количество мусорок, расположенных по кругу, затем n  чисел — количество фантиков во всех этих мусорках, требуется найти количество фантиков, которое соберёт Максим за половину круга для всех его начальных позиций. Вывести все эти числа от 1  до N (1 ≤ N ≤ 109)

Вложения к задаче
Показать ответ и решение
f = open("4.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
s = [0] * n
s[0] = sum(a[:n // 2])
for i in range(1, n):
    s[i] = s[i - 1] - a[i - 1] + a[(i + n // 2 - 1) % n]
print(*s)

Ответ: 747 1082 1439 1507 1172 815

Ошибка.
Попробуйте повторить позже

Задача 15#36822

Дано число n  — количество мусорок, расположенных по кругу, затем n  чисел — количество фантиков во всех этих мусорках. Требуется найти количество фантиков, которое соберёт Рома, если пройдет круг от элемента с номером   i  до элемента с номером (n∕∕2− 1 + i)%n  . i  принимает значения от 0  до n − 1  . Рома может начинать передвижение по кругу только с мусорок, номера которых четны.

Выведите наибольшее количество фантиков, которое Рома может собрать.

Вложения к задаче
Показать ответ и решение
f = open("3.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
s = [0] * n
s[0] = sum(a[:n//2])
for i in range(2, n, 2):
    s[i] = s[i - 2] - a[i - 1] - a[i - 2] + a[(n//2-2+i) % n] + a[(n//2-1+i) % n]
print(max(s))

Ответ: 1200

Ошибка.
Попробуйте повторить позже

Задача 16#36820

Дано число n  — количество мусорок, расположенных по кругу, затем n  чисел — количество фантиков во всех этих мусорках, требуется найти количество фантиков, которое соберёт ИВ, если пройдет по кругу от элемента с номером i до элемента с номером (n − 2+ i)%n.  i  принимает значения от 0  до n− 1  . ИВ может двигаться только в одну сторону (то есть, ИВ не может разворачиваться и идти собирать фантики в мусорках, которые уже посетил).

Найдите и выведите на экран через пробел все количества фантиков, учитывая все позиции, откуда ИВ может пойти.

Вложения к задаче
Показать ответ и решение
f = open("2.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
s = [0] * n
s[0] = sum(a[:n-2+1]) #+1 чтобы учесть n-2ое число

for i in range(1, n):
    s[i] = s[i - 1] - a[i - 1] + a[(n-2+i) % n]
print(*s)

Ответ: 1500 2000 1900 1800 1700 1600

Ошибка.
Попробуйте повторить позже

Задача 17#36819

Дано натуральное число n  , затем n   натуральных чисел, записанных в круг. Требуется найти количество пар чисел, чья сумма будет кратна 10  . Парой считаются два элемента, стоящие рядом.

Вложения к задаче
Показать ответ и решение
f = open("1.txt")
n = int(f.readline())
a = [int(f.readline()) for i in range(n)]
ans = 1 * ((a[0] + a[-1]) % 10 == 0)  # Учитываем "концы" круга

for i in range(n - 1):
    if (a[i] + a[i + 1]) % 10 == 0:
        ans += 1
print(ans)

Ответ: 4

Ошибка.
Попробуйте повторить позже

Задача 18#30019

В городе M расположена кольцевая автодорога длиной в N километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги в одном из пунктов сборки мусора собираются поставить мусороперерабатывающий завод таким образом, чтобы стоимость доставки мусора была минимальной. Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым. Контейнеры нумеруются с 1 до N. Рядом с каким пунктом сбора мусора нужно поставить мусороперерабатывающий завод?

Описание входных данных:

Первое число N — количество контейнеров для мусора. Последующие N чисел — количество килограмм мусора, которое производится на точке.

Описание выходных данных:

Одно число — номер контейнера для мусора рядом с которым стоит расположить перерабатывающий завод.

Вложения к задаче
Показать ответ и решение
file = open(’garbage3.txt’, ’rt’)  
n = int(file.readline())  
a = [int(file.readline()) for i in range(n)]  
s = [sum(a[0:n // 2])]  
for i in range(1, n):  
    s.append(s[i - 1] - a[i - 1] + a[(i - 1 + n // 2) % n])  
 
summa = sum(a)  
p = []  
for i in range(n):  
    p.append(summa - s[i])  
 
price = 0  
for i in range(n // 2):  
    price += i * a[i]  
for i in range(n // 2, n):  
    price += (n - i) * a[i]  
 
minim = price  
min_k = -1  
for i in range(1, n):  
    price -= s[i]  
    price += p[i]  
    if price < minim:  
        minim = price  
        min_k = i + 1  
print(min_k)

Ответ: 39250

Ошибка.
Попробуйте повторить позже

Задача 19#30018

В городе M расположена кольцевая автодорога длиной в N километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги около k-ого пункта сборки мусора поставили мусороперерабатывающий завод. Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым. Контейнеры нумеруются с 1 до N. Требуется найти модуль разницы стоимостей сбора всего мусора при перемещении завода с k-ой позиции контейнера на k + 1(при k = N, (k + 1)-ая позиция соответствует 1 позиции контейнера)

Описание входных данных:

Первое число N — количество контейнеров для мусора, второе число k - номер контейнера для мусора рядом с которым стоит перерабатывающий завод. Последующие N чисел — количество килограмм мусора, которое производится на точке.

Описание выходных данных:

Одно число — модуль разницы стоимостей сбора мусора при перемещении завода с k-ой позиции контейнера на k + 1(при k = N, (k + 1)-ая позиция соответствует 1 позиции контейнера)

Вложения к задаче
Показать ответ и решение
file = open(’garbage2.txt’, ’rt’)  
n = int(file.readline())  
k = int(file.readline()) - 1  
a = [int(file.readline()) for i in range(n)]  
s = [sum(a[0:n // 2])]  
for i in range(1, n):  
    s.append(s[i - 1] - a[i - 1] + a[(i - 1 + n // 2) % n])  
 
summa = sum(a)  
p = []  
for i in range(n):  
    p.append(summa - s[i])  
 
# ищем стоимость, если завод стоит на  
# k-ой позиции  
price = 0  
for i in range(1, n):  
    price += min(i, n - i) * a[(i + k) % n]  
 
# найдем k+1 стоимость  
new_price = price - s[k + 1] + p[k + 1]  
print(abs(price - new_price))  

Ответ: 64769

Ошибка.
Попробуйте повторить позже

Задача 20#30017

Дано количество мусорок, расположенных по кругу, и количество фантиков во всех этих мусорках, требуется найти количество фантиков, которое соберёт Петя за половину круга для всех его начальных позиций. Вывести все эти числа от 1  до N  (1 ≤ N ≤ 105  )

Вложения к задаче
Показать ответ и решение
file = open(’garbage1.txt’, ’rt’)  
n = int(file.readline())  
a = [int(file.readline()) for i in range(n)]  
s = [0]*n  
s[0] = [sum(a[:a[n // 2]])]  
for i in range(1, n):  
    s[i] = s[i - 1] - a[i - 1] + a[(i - 1 + n // 2) % n])  
print(*s)

Ответ: 747 1082 1439 1507 1172 815
Рулетка
Вы можете получить скидку в рулетке!