Задание 27. Информатика. ЕГЭ. Поляков-2662
- Просмотры: 93
- Изменено: 25 ноября 2024
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на \(3\) и при этом была максимально возможной. Гарантируется, что искомую сумму чисел получить можно.
Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
Даны два входных файла (файл \( A \) и файл \( B\)), каждый из которых содержит в первой строке количество пар \(N\) ( \( 1 \leqslant N \leqslant 100000\)). Каждая из следующих \( N \) строк содержит два натуральных числа, не превышающих \( 10\, 000\).
Пример организации исходных данных во входном файле:
\(6\)
\(1\,\, 3\)
\(5\,\, 11\)
\(6\,\, 9\)
\(5\,\, 4\)
\(3\,\, 3\)
\(1\,\, 1\)
Для указанных входных данных значением искомой суммы должно быть число \(30\).
В ответе укажите два числа: сначала значение искомой суммы для файла \( A \), затем для файла \( B\).
Решение:
Python
fnames = ['27-2a.txt', '27-2b.txt']
for fn in fnames:
fd = open(fn)
N = int(fd.readline())
s = 0
rem1 = [10**10, 10**10]
rem2 = 10**10
for line in fd:
x, y = map(int, line.split())
s += max(x, y)
d = abs(x - y)
if d % 3 == 1 and rem1[1] > d:
rem1[1] = d
rem1.sort()
elif d % 3 == 2:
rem2 = min(rem2, d)
r = s % 3
if r == 1:
s -= rem1[0]
elif r == 2:
s -= min(rem2, sum(rem1))
print(s)
C++
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
int32_t main() {
string fnames[] = {"27-2a.txt", "27-2b.txt"};
for(string fn: fnames) {
ifstream in(fn);
unsigned int N, s = 0;
in >> N;
int rem1[2] = {100000, 100000}, rem2 = 100000;
while (N--)
{
int x, y;
in >> x >> y;
s += max(x, y);
int d = abs(x - y);
if (d % 3 == 1 && d < rem1[1]) {
rem1[1] = d;
sort(rem1, rem1+2);
}
else if(d % 3 == 2)
rem2 = min(rem2, d);
}
int r = s % 3;
if (r == 1)
s -= min(rem1[0], rem1[1]);
else if (r == 2)
s -= min(rem2, rem1[0] + rem1[1]);
cout << s << '\n';
}
}
Ответ: \(109737 \,\, 401536407\)