(Д.Ф. Муфаззалов) Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на \(4\) и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число — максимально возможную сумму, соответствующую условиям задачи.
Входные данные. Даны два входных файла (файл \(A\) и файл \(B\)), каждый из которых содержит в первой строке количество троек \(N\) (\(1 \leqslant N \leqslant 100000\)). Каждая из следующих \(N\) строк содержит три натуральных числа, не превышающих \(10~000\).
Пример входного файла:
\(6\)
\(1 \,\, 3 \,\, 2\)
\(5 \,\, 12 \,\, 12\)
\(6 \,\, 8 \,\, 12\)
\(5 \,\, 4 \,\, 12\)
\(3 \,\, 3 \,\, 12\)
\(1 \,\, 1 \,\, 13\)
Для указанных входных данных значением искомой суммы должно быть число \(63\).
В ответе укажите два числа: сначала значение искомой суммы для файла \(А\), затем для файла \(B\).
Решение:
C++
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
int32_t main()
{
string base = "";
string fnames[] = {"27-A.txt", "27-B.txt"};
for(string fn: fnames) {
ifstream in(base + fn);
int n, s = 0, d = 1000000;
in >> n;
for(int i = 0; i < n; i++) {
int t[3];
in >> t[0] >> t[1] >> t[2];
sort(t, t+3);
s += t[2];
if(abs(t[2] - t[1]) % 4)
d = min(d, abs(t[2] - t[1]));
else if (abs(t[2] - t[0]) % 4)
d = min(d, abs(t[2] - t[0]));
}
if (s % 4 == 0)
s -= d;
cout << s << '\n';
}
}
Ответ: \(15062 \,\, 45226419\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене