Land plots#185

Land plots (Editorial)

Позначимо ширину -го стовпчика через w_i, а висоту -го рядка — через h_j. Тоді площа ділянки на перетині — це просто w_i \cdot h_j.

Умова дає нам дві діагоналі:

a_i = w_i h_i, \qquad b_i = w_{i+1} h_i.

Поділивши друге на перше, отримуємо співвідношення сусідніх ширин:

\frac{w_{i+1}}{w_i} = \frac{b_i}{a_i}.

Тепер виразимо шукану площу. Нас цікавить w_p h_q, а з першої рівності h_q = a_q / w_q, тому

w_p h_q = a_q \cdot \frac{w_p}{w_q} = a_q \cdot \prod_{i=q}^{p-1} \frac{b_i}{a_i} \qquad (p > q),

і симетрично a_q \cdot \prod_{i=p}^{q-1} \frac{a_i}{b_i} при p < q; при p = q відповідь дорівнює просто a_q.

Зверніть увагу, що самі w_i та h_j ми так і не знаходимо — вони можуть бути ірраціональними, — але їхній добуток завжди визначений однозначно.

Головна технічна складність — точність. Добуток дробів обчислювати в дійсних числах не можна, а чисельник і знаменник як цілі числа переповнять будь-який тип: це добуток до тисячі співмножників по 10^9. Саме тому умова й вимагає відповідь у факторизованому вигляді.

Тому працюємо одразу з розкладами на прості. Заведемо словник «просте показник» і додамо до нього:

  • розклад a_q зі знаком плюс;

  • розклади всіх b_i (для від до p-1) зі знаком плюс;

  • розклади всіх a_i (для того ж діапазону) зі знаком мінус.

Кожне число не перевищує 10^9, тому розкладається пробними діленнями за \mathcal{O}(\sqrt{10^9}) \approx 3 \cdot 10^4 операцій; чисел щонайбільше 2n \le 2000, тому загальна складність — близько 6 \cdot 10^7 операцій.

Наприкінці виводимо всі прості з ненульовим показником. Показники, що скоротилися до нуля, виводити не треба; за умовою відповідь коректна, тому від'ємних підсумкових показників не залишиться.