Районная олимпиада 2019-2020 информатика


Задача F. Тройки

Ограничение по времени:
1 секунда
Ограничение по памяти:
256 мегабайт

Дан массив $a$ длины $n$, который состоит из целых натуральных чисел. Все числа в массиве различные. Вам нужно посчитать количество троек $i$, $j$, $k$, что $i \ne j$, $i \ne k$, $j \ne k$ и $a_i*a_j=a_k^2$.
Формат входного файла
В первой строке задано одно целое число $n$ $(3 <= n <= 10^5)$. В следующей строке задано $n$ целых натуральных чисел $a_1$, $a_2$, $\dots$, $a_n$ $(1 <= a_i <= 3 * 10^5)$.
Формат выходного файла
Выведите одно целое число — ответ на задачу.
Система оценки
Данная задача содержит $10$ тестов. Каждый тест оценивается в $10$ баллов:
  1. $n <= 100$, $1 <= a_i <= 500$. Тесты с номерами 1-3.
  2. $n <= 5000$, $1 <= a_i <= 10000$. Тесты с номерами 4-6.
  3. $n <= 10^5$, $1 <= a_i <= 300000$. Тесты с номерами 7-10.
Пример:
Вход
6
6 3 9 4 12 27
Ответ
6
( Aibar Kuanyshbay )
посмотреть в олимпиаде

Комментарий/решение:

  5
2020-11-12 14:18:36.0 #

Здравствуйте, эту задачу возможно решить за такие ограничение?

  1
2022-02-17 19:29:04.0 #

Решение на 60 баллов за O(n^2)

показать/скрыть код

пред. Правка 4   0
2024-05-26 21:25:44.0 #

Пусть p[i] - минимальное натуральное число такое что p[i] * i - квадрат,

а также C -> максимальное число в массиве a

Тогда нетрудно заметить что p[a[i]] = p[a[j]]

Поэтому надо перебирать только такие числа что p[x] = p[y]

Нетрудно доказать что максимальный размер множества чисел с одинаковым p[i] будет равен sqrt(C)

Тогда обычный перебор будет работать за O((n / sqrt(C)) * sqrt(C) ^ 2) =

O(n * sqrt(C))

А общая асимптотика будет: O(ClogC + n * sqrt(C))

показать/скрыть код