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

Просмотры: 61
Изменено: 11 октября 2024

(А. Жуков) Имеется набор данных, состоящий из положительных целых чисел. Необходимо определить количество пар элементов \((a_i, \, a_j)\) этого набора, в которых \(1 \leqslant i < j \leqslant N\), сумма элементов нечётна, а произведение делится на \(13\).

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

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

\(5\)
\(4\)
\(13\)
\(27\)
\(39\)
\(7\)

Для указанных входных данных количество подходящих пар должно быть равно \(2\). В приведённом наборе имеются две пары \((4, \, 13)\) и \((4, \, 39)\), сумма элементов которых нечётна, и произведение кратно \(13\).

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

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

Решение:

C++


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

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, tmp, even = 0, even13 = 0, odd = 0, odd13 = 0, p = 0;
        in >> N;
        in >> tmp;

        if (tmp % 13) {
            if (tmp % 2) odd++;
            else even++;
        }
        else {
            if (tmp % 2) odd13++;
            else even13++;
        }

        for (int i = 1; i < N; i++) {
            in >> tmp;
            if (tmp % 13) {
                if (tmp % 2) {
                    p += even13;
                    odd++;
                }
                else {
                    p += odd13;
                    even++;
                }
            }
            else {
                if (tmp % 2) {
                    p += even + even13;
                    odd13++;
                }
                else {
                    p += odd + odd13;
                    even13++;
                }
            }
        }    

        cout << p << '\n';
    }
}

Ответ: \(19 \,\, 132286186\)