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

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

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

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

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

\(9\)
\(12\)
\(45\)
\(5\)
\(4\)
\(21\)
\(20\)
\(10\)
\(12\)
\(26\)

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

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

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

Решение:

C++


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

using namespace std;

int p2(int x) {
    return x * x;
}

int pn(int x, int n) {
    return n == 0 ? 1 : x * pn(x, n-1);
}

int32_t main() {

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

    for(string fn: fnames) {
        ifstream in(base + fn);
        int n, mn1 = pn(10, 9), mn2 = pn(10, 9);
        in >> n;

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

        for(int i = 0; i < n - 5; i++) {
            mn1 = min(mn1, p2(a[i]));
            mn2 = min(mn2, mn1 + p2(a[i+5]));
        }

        cout << mn2 << '\n';

    }
}

Ответ: \(11009 \,\, 200\)