#include <iostream>
#include <queue>
using namespace std;
// Произведение кратно 5, когда одно из чисел оканчивается на 0 либо 5
int cnt[2][3][2];
// трехмерный массив
// первый параметр - на что оканчивается число. 5 или 0 - на 0, 1 - вообще на все что угодно
// второй - остаток от деления на три
// третий - 0 для чисел <= 33 и для больше 33
queue <int> q;
int main() {
// Первые 11 - в очередь
int n; cin >> n;
for (int i = 0; i < 11; i++) {
int val; cin >> val; q.push(val);
}
// теперь в очереди 11 элементов. Считывая следущий, мы будем
// вынимать из очереди 1 и класть его в так называемое
// множество "доступных элементов", на расстояние большее 11
int ans = 0;
for (int i = 11; i < n; i++) {
int last = q.front(); // берем первое
q.pop(); // удаляем первое
//добавляем в множество доступных в нужную ячейку
int idx2 = last % 3;
int idx3 = 0;
if (last > 33) {
idx3 = 1; // подробнее см выше
}
if (last % 5 == 0) {
cnt[0][idx2][idx3] += 1; //если последнее 0 или 5 добавляем в список чисел у которых
cnt[1][idx2][idx3] += 1; // последнее 0 или 5 и в весь список
} else {
cnt[1][idx2][idx3] += 1;
}
// теперь считываем текущее
int cur; cin >> cur;
// Считаем для него количество пар, и добавляем в очередь (Либо сначала добавляем)
// (Добавляем потому что после него первые 10 элементов не могут с ним дружить)
q.push(cur);
//сумма должна быть 3. Значит сумма остатков 0.
// Если у первого остаток 1, у второго должен быть 2.
// Если у первого 2, у второго 1
// Если у первого 0, у второго тоже 0.
// По первому остатку находим остаток вторых, нужных нам чисел для пары
idx2 = (3 - cur % 3) % 3;
// если он не делится на 5, то к нему нужны только числа делящиеся, чтобы произведение было 5
// внутри рассматриваем еще 2 случая
// Если наш элемент больше 33, то подходят все
// Иначе нужно чтобы вторая пара была больше 33
if (cur % 5 != 0) {
if (cur > 33) {
ans += cnt[0][idx2][0];
ans += cnt[0][idx2][1];
} else {
ans += cnt[0][idx2][1];
}
} else if (cur % 5 == 0) {
// точно так же как и в предыдущем пункте, только теперь
// вторая пара может оканчиваться на любую цифру
// строчек просто будет в 2 раза больше
// прибавится индекс 1 в первом измерении
if (cur > 33) {
ans += cnt[0][idx2][0];
ans += cnt[0][idx2][1];
ans += cnt[1][idx2][0];
ans += cnt[1][idx2][1];
} else {
ans += cnt[0][idx2][1];
ans += cnt[1][idx2][1];
}
}
}
cout << ans << "\n";
return 0;
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.