Олимпиадный тренинг

Задача . D. Красно-зеленые башни


Задача

Темы: дп *2000

Имеется r красных и g зеленых кубиков для строительства красно-зеленой башни. Красно-зеленую башню можно построить по следующим правилам:

  • Красно-зеленая башня должна состоять из некоторого количества уровней;

  • Пусть красно-зеленая башня состоит из n уровней, тогда первый уровень этой башни должен состоять из n кубиков, второй уровень — из n - 1 кубиков, третий — из n - 2 кубиков, и так далее — последний уровень такой башни должен состоять из одного кубика. Другими словами, каждый последующий уровень должен содержать на один кубик меньше, чем предыдущий;

  • Каждый уровень красно-зеленой башни может состоять только из кубиков одного цвета.

Пусть h — наибольшее возможное количество уровней у красно-зеленой башни, построенной по описанным выше правилам из r красных и g зеленых кубиков. Требуется определить сколько различных красно-зеленых башен, состоящих из h уровней, можно построить из имеющихся кубиков.

Две красно-зеленых башни считаются различными, если существует уровень, который в первой башне состоит из кубиков красного цвета, а во второй — из кубиков зеленого цвета.

Ваша задача — написать программу, которая по заданным значениям r и g найдет искомое количество различных красно-зеленых башен высоты h по модулю 109 + 7.

Входные данные

В единственной строке содержатся два целых числа r и g, разделенных одним пробелом, — количество имеющихся красных и зеленых кубиков соответственно (0 ≤ r, g ≤ 2·105, r + g ≥ 1).

Выходные данные

Выведите единственное целое число — искомое количество различных красно-зеленых башен высоты h по модулю 109 + 7.

Примечание

На приведенном в условии изображении показаны все возможные красно-зеленые башни для первого примера из условия.


Примеры
Входные данныеВыходные данные
1 4 6
2
2 9 7
6
3 1 1
2

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя