Позначимо ширину -го стовпчика через w_i, а висоту -го рядка — через h_j. Тоді площа ділянки на перетині — це просто w_i \cdot h_j.
Умова дає нам дві діагоналі:
Поділивши друге на перше, отримуємо співвідношення сусідніх ширин:
Тепер виразимо шукану площу. Нас цікавить w_p h_q, а з першої рівності h_q = a_q / w_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 операцій.
Наприкінці виводимо всі прості з ненульовим показником. Показники, що скоротилися до нуля, виводити не треба; за умовою відповідь коректна, тому від'ємних підсумкових показників не залишиться.