Задания 27. Программирование

03.06.2022

В задание №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 не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.

Проще всего 26-е задание решать в Excel. Можно решить задание и с помощью программы, но это будет посложнее. На ЕГЭ решение через программы не рекомендуется.
Здесь и далее во всех задачах этого класса предполагается, что не все файлы могут быть сохранены на диске, то есть хотя бы для одного файла места не хватит.
Решение - программирование:
Ответ: 56850
Задание 27 Досрочный 2022
В городе M расположена кольцевая автодорога длиной в N километров с движением в обе стороны. На каждом километре автодороги расположены пункты приема мусора определенной вместимости. В пределах кольцевой дороги в одном из пунктов сборки мусора собираются поставить мусороперерабатывающий завод таким образом, чтобы стоимость доставки мусора была минимальной. Стоимость доставки мусора вычисляется, как вместимость пункта сбора умноженная на расстояние от пункта сбора мусора до мусороперерабатывающего завода. Если мусороперерабатывающий завод находится рядом с пунктом сбора расстояние считается нулевым. Контейнеры нумеруются с 1 до N. Рядом с каким пунктом сбора мусора нужно поставить мусороперерабатывающий завод?
Входные данные:

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

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

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

скачать >>
27-A.txt
27-B.txt

Пример организации входных данных: 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) 
    
Ответ: 56850