Задание 27. Информатика. ЕГЭ. Поляков-2666

Просмотры: 91
Изменено: 24 ноября 2024

Имеется набор данных, состоящий из положительных целых чисел, каждое из которых не превышает \(1000\). Требуется найти для этой последовательности контрольное значение — наибольшее число \(R\), удовлетворяющее следующим условиям:
— \(R\) — произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных, но равных по величине элементов допускаются);
— \(R\) делится на \(6\).

Входные данные. Даны два входных файла (файл \(A\) и файл \(B\)), каждый из которых содержит в первой строке количество чисел \(N\) (\(1 \leqslant N \leqslant 100000\)). Каждая из следующих \(N\) строк содержит одно натуральное число, не превышающее \(10~000\).

Пример входного файла:

\(6\)
\(60\)
\(17\)
\(3\)
\(7\)
\(9\)
\(60\)

Для указанных входных данных искомое контрольное значение равно \(3600\).

В ответе укажите два числа: сначала контрольное значение для файла \(А\), затем для файла \(B\).

Файл с данными

Решение:

C++


#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>

using namespace std;

int32_t main() {
    string base = "";
    string fnames[] = {"27-6a.txt", "27-6b.txt"}; 

    for(string fn: fnames) {
        ifstream in(base + fn);
        int n, tmp, n2 = 0, n3 = 0, nm = 0, n6[2] = {0, 0};
        in >> n;

        for(int i = 0; i < n; i++) {
            in >> tmp;
            if (tmp % 6 == 0) {
                n6[0] = max(n6[0], tmp);
                sort(n6, n6 + 2);
            }
            else if (tmp % 3 == 0)
                n3 = max(n3, tmp);
            else if (tmp % 2 == 0)
                n2 = max(n2, tmp);
            else
                nm = max(nm, tmp);
        }

        int arr[4] = {n6[0], n2, n3, nm};
        sort(arr, arr + 4);

        cout << max(n6[1] * arr[3], n2 * n3) << '\n';
    }

}

Ответ: \(782040 \,\, 997002\)