В задание №27
Тема: Обработка данных, вводимых из файла в виде последовательности чисел.
Проверяется умения создавать собственные программы (20–40 строк) для анализа числовых последовательностей
Примеры заданий:
Задание 27 Простое задание (Решу ЕГЭ)
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные:
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
скачать >>
27-A_demo.txt
27-B_demo.txt
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 32.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Здесь и далее во всех задачах этого класса предполагается, что не все файлы могут быть сохранены на диске, то есть хотя бы для одного файла места не хватит.
Решение - программирование:
Ответ: 56850
Задание 27 Досрочный 2022
Входные данные:
Первое число N — количество контейнеров для мусора. Последующие N
чисел — количество килограмм мусора, которое производится на точке.
Выходные данные:
Одно число — номер контейнер для мусора рядом с которым стоит
расположить перерабатывающий завод.
Пример организации входных данных:
6
8
20
5
13
7
19
Для данного примера ответ — 6 (7⸱1 + 13⸱2 + 5⸱3 + 20⸱2 + 8⸱1 + 19⸱0)
Решение - программирование:
def r(i,p,N):
'''
вычисляем растояние между точкой сбора мусора p и мусорного контейнера i
как между стрелками на циферблате с числами 1..N;
p - точка сбора мусора (мусорозавод), часовая стрелка;
i - мусорный ящик, минутная стрелка
'''
l=abs(p-i)
if l<=N//2:
return l
else:
return N-l
# из файла с данными удалите первую строку с N
s=open('27-A.txt','r').read().splitlines()
s=list(map(int,s))
N=len(s)
smin=10**15
pmin=10**15
# подсчет стоимости своза мусора в точку p
for p in range(1,N+1):
ss=[] # массив расстояний от точки p
for k in range(len(s)):
t=r(k+1,p,N)
ss.append(t)
st=0 # сюда складываем стоимости сбора мусора
for i in range(1,N+1):
st+=s[ i-1]*ss[ i-1]
if st>>',smin,pmin)
