Кількість прямокутників#11258

Кількість прямокутників (Розбір)

Розглянемо розмір прямокутника a \times b, зображеного на сітці. Розглянемо, скількома способами можна вибрати значення . Сітка містить рядків квадратів, отже в сітці є n + 1 горизонтальна лінія. Пронумеруємо їх числами від до n + 1. Виберемо дві лінії і j~(i < j). Проведемо між ними відрізок — це і буде вертикальна сторона прямокутника . Кількість способів вибрати два числа і j~(i < j) з множини \{1, 2, ..., n + 1\} рівна C_{n+1}^2. Наприклад, для n = 2 є варіанти вибрати вертикальну сторону прямокутника:

Аналогічно, в сітці є m + 1 вертикальна лінія. Кількість способів вибрати горизонтальну сторону прямокутника рівна C_{m+1}^2.

Отже, кількість різних прямокутників на сітці рівна

C_{n+1}^2 \cdot C_{m+1}^2 = {(n + 1) \cdot n \over 2} \cdot {(m + 1) \cdot m \over 2}

Приклад

Для прямокутника 2 \times 3 є:

Загалом отримали C_3^2 \cdot C_4^2 = 3 \cdot 6 = 18 прямокутників.

Реалізація алгоритму

Оскільки n, m \le 10^5, то кількість прямокутників може досягати C_{n+1}^2 \cdot C_{m+1}^2 \le (10^5)^2 \cdot (10^5)^2 = 10^{20}. Цей результат виходить за межі бітового цілого числа. Тому реалізуємо рішення на мові Пітон.

n, m = map(int, input().split())
a = (n + 1) * n // 2
b = (m + 1) * m // 2
res = a * b
print(res)