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

Просмотры: 81
Изменено: 23 ноября 2024

На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передаёт по каналу связи неотрицательное целое число – количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора минимальное нечётное произведение двух показаний, между моментами передачи которых прошло не менее \(6\) минут. Если получить такое произведение не удаётся, ответ считается равным «\(-1\)».

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

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

\(11\)
\(12\)
\(45\)
\(5\)
\(3\)
\(17\)
\(23\)
\(21\)
\(20\)
\(19\)
\(12\)
\(26\)

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

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

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

Решение:

C++


#include<iostream>
#include<fstream>
#include<string>
#include<vector>

using namespace std;

int32_t main() {

    string base = "";
    string fnames[] = {"27-A.txt", "27-B.txt"};
    
    const int inf = 2000000000;

    for (string fn: fnames) {
        fstream in(base + fn);
        int n, mn1 = inf, mn2 = inf;

        in >> n;

        vector<int> v(n, 0);
        for (int i = 0; i < n; i++)
            in >> v[i];

        for (int i = 0; i < n - 6; i++) {
            if (v[i] % 2) 
                mn1 = min(mn1, v[i]);
            if(v[i+6] % 2 && mn1 < inf)
                mn2 = min(mn2, mn1 * v[i+6]);
        }

        cout << (mn2 == inf ? -1 : mn2) << '\n';
    }    
}

Ответ: \(2465 \,\, 121\)