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


Задача F. Үштіктер

Ограничение по времени:
1 second
Ограничение по памяти:
256 megabytes

Сізге ұзындығы $n$ болатын, бүтін сандардан тұратын $a$ массиві берілген. Массивтегі барлық сандар әртүрлі. Сізге $i \ne j$, $i \ne k$, $j \ne k$ және $a_i*a_j=a_k^2$ орындалатын $i$, $j$, $k$ үштіктер санын табу керек.
Формат входного файла
Бірінші жолда $n$ $(3 <= n <= 10^5)$ бүтін саны берілген. Келесі жолда $a_1$, $a_2$, $\dots$, $a_n$ $(1 <= a_i <= 3 * 10^5)$ болатын $a$ массиві берілген.
Формат выходного файла
Есептің жауабын шығарыңыз.
Система оценки
Бұл есеп $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))

кодты корсету/жасыру