Районная олимпиада 2019-2020 информатика
Задача F. Тройки
Ограничение по времени:
1 секунда
Ограничение по памяти:
256 мегабайт
Дан массив a длины n, который состоит из целых натуральных чисел. Все числа в массиве различные. Вам нужно посчитать количество троек i, j, k, что i≠j, i≠k, j≠k и ai∗aj=a2k.
Формат входного файла
В первой строке задано одно целое число n (3<=n<=105). В следующей строке задано n целых натуральных чисел a1, a2, …, an (1<=ai<=3∗105).
Формат выходного файла
Выведите одно целое число — ответ на задачу.
Система оценки
Данная задача содержит 10 тестов. Каждый тест оценивается в 10 баллов:
- n<=100, 1<=ai<=500. Тесты с номерами 1-3.
- n<=5000, 1<=ai<=10000. Тесты с номерами 4-6.
- n<=105, 1<=ai<=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))
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.