Задание 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\)