Районная олимпиада 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$ баллға бағаланады:
- $n <= 100$, $1 <= a_i <= 500$. 1-3 нөмердегі тесттер.
- $n <= 5000$, $1 <= a_i <= 10000$. 4-6 нөмердегі тесттер.
- $n <= 10^5$, $1 <= a_i <= 300000$. 7-10 нөмердегі тесттер
Пример:
Вход 6 6 3 9 4 12 27Ответ
6( Aibar Kuanyshbay )
Комментарий/решение:
Пусть 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))
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.