Задание 27. Информатика. ЕГЭ. Поляков-2660
- Просмотры: 133
- Изменено: 23 ноября 2024
(Демовариант 2021). Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на \(3\) и при этом была максимально возможной. Гарантируется, что искомую сумму чисел получить можно.
Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
Даны два входных файла (файл \( A \) и файл \( B\)), каждый из которых содержит в первой строке количество пар \(N\) ( \( 1 \leqslant N \leqslant 100000\)). Каждая из следующих \( N \) строк содержит два натуральных числа, не превышающих \( 10\, 000\).
Пример организации исходных данных во входном файле:
\(6\)
\(1\,\, 3\)
\(5\,\, 12\)
\(6\,\, 9\)
\(5\,\, 4\)
\(3\,\, 3\)
\(1\,\, 1\)
Для указанных входных данных значением искомой суммы должно быть число \( 32 \).
В ответе укажите два числа: сначала значение искомой суммы для файла \( A \), затем для файла \( B\).
Предупреждение: для обработки файла \( B \) не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Решение:
Python
fnames = ['27-a.txt', '27-b.txt']
for fn in fnames:
fd = open(fn)
n = int(fd.readline())
s = 0
min_diff = 10**10
for line in fd:
a, b = map(int, line.split())
s += max(a, b)
if (abs(a - b)):
min_diff = min(min_diff, abs(a - b))
if s % 3 == 0:
s -= min_diff
print(s)
C++
#include<iostream>
#include<fstream>
using namespace std;
int32_t main() {
const char* fname[2] = {"27-a.txt", "27-b.txt"};
for(int q = 0; q < 2; q++) {
ifstream in(fname[q]);
unsigned int n;
unsigned long long sum = 0;
unsigned int min_diff = 100000;
in >> n;
while(n--) {
int a, b;
in >> a >> b;
sum += max(a, b);
unsigned int tmp = abs(a - b);
if (tmp % 3)
min_diff = min(min_diff, tmp);
}
if(sum % 3 == 0)
sum -= min_diff;
cout << sum << endl;
in.close();
}
}
Ответ: \(127127 \,\, 399762080\)