Будем рассматривать бомбы подряд по одной. Рассмотрим бомбу с центром (xb, yb) и радиусом поражения r. Все двигатели, которые могут быть поражены этой бомбой, находятся в вертикальной бесконечной полосе, ограниченной лучами x = xb - r и x = xb + r.
Переберем каждый x из этой полосы. По фиксированному x мы можем найти отрезок, который покрывает область поражения бомбы (то есть круг) просто решив уравнение (y - yb)2 ≤ r2 - (x - xb)2. Для каждой вертикали сохраним все отрезки y-ов, которые мы для нее получили. Теперь нам достаточно найти количество двигателей на этой вертикали, которые не покрыты ни одним отрезком. Это можно с помощью сканирующей прямой за , где s — количество отрезков на этой вертикали, а c — количество двигателей.
Итоговая асимптотика: . Также могли возникнуть проблемы с лимитом по памяти, для решения этих проблем можно было заметить, что для хранения данных в данной задаче достаточно использовать тип short, который в 2 раза меньше типа данных int.