Codeforces Round 185 (Div. 1) |
---|
Закончено |
На данный момент Тайни изучает вычислительную геометрию. Когда он пытался решить задачу под названием «Ближайшая пара точек на плоскости», то обнаружил, что код, имеющий неверную временную сложность, был засчитан как правильный, а не отвергнут по причине превышения лимита времени.
Задача выглядит следующим образом. Вам дано n точек на плоскости, найдите пару точек, между которыми минимальное расстояние. Расстояние между (x1, y1) и (x2, y2) равняется .
Псевдокод кода с неверной сложностью имеет следующий вид:
ввести n
for i from 1 to n
ввести координаты i-той точки в переменную p[i]
отсортировать массив p[] в первую очередь по возрастанию x координаты, во вторую по возрастанию y
d=INF //здесь INF — это достаточно большое число
tot=0
for i from 1 to n
for j from (i+1) to n
++tot
if (p[j].x-p[i].x>=d) then break //обратите внимание, что "break" используется
//только для того, чтобы выйти из цикла "for j"
d=min(d,distance(p[i],p[j]))
вывести d
В этом коде значение tot можно рассматривать как время выполнения кода. Так как компьютер выполняет фиксированное количество операций в секунду, значение tot не должно превышать k для того, чтобы не превысить лимит времени.
Вы — первоклассный хакер. Не поможете Тайни сгенерировать данные для теста, на которых код получит превышение лимита времени?
В первой строке записаны два целых числа через пробел — n и k (2 ≤ n ≤ 2000, 1 ≤ k ≤ 109).
Если данных, при которых код получит TLE (превышение лимита времени), не существует, выведите «no solution» (без кавычек); в противном случае, выведите n строк, так чтобы i-ая строка содержала два целых числа xi, yi (|xi|, |yi| ≤ 109) — координаты i-ой точки.
Должны выполняться следующие условия:
4 3
0 0
0 1
1 0
1 1
2 100
no solution
Название |
---|