27

#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.