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

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

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

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

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

\(4\)
\(7\)
\(5\)
\(6\)
\(12\)

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

В ответе укажите два числа: сначала количество подходящих пар для файла \(А\), затем для файла \(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;
        in >> n;
        int pair = 0, n6 = 0, n3 = 0, n2 = 0;
        for(int i = 0; i < n; i++) {
            int tmp;
            in >> tmp;
            pair += n6;
            if(tmp % 6 == 0) {
                pair += i - n6;
                n6++;
            }
            else if(tmp % 3 == 0) {
                pair += n2;
                n3++;
            }
            else if(tmp % 2 == 0) {
                pair += n3;
                n2++;
            }
        }

        cout << pair << '\n';
    }

}

Ответ: \(47 \,\, 745460178\)