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

Задача . E. Случайное распределение рангов


Представим настоящий контест или экзамен, состоящий из n участников. Каждый участник получит определенное количество очков. Мы можем более-менее предсказать состояние турнирной таблицы, если рассчитаем статистику прошлых успехов участников.

Предположим, что очки i-ого участника будут равномерно распределены по интервалу [li, ri] (очки участника могут быть вещественным числом). Можете ли Вы предсказать состояние турнирной таблицы по этим данным? Другими словами, для каждого участника Вы должны найти вероятность того, что он займет в итоговой таблице определенное место. Участники в таблице сортируются по возрастанию очков, то есть участник с наибольшим количеством очков занимает последнее место.

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

В первой строке записано целое число n (1 ≤ n ≤ 80), показывающее, сколько у нас участников. Каждая из следующих n строк содержит наши предсказания, i-ая строка содержит пару целых чисел li, ri (0 ≤ li < ri ≤ 109) — интервал очков участника i.

Считайте участников пронумерованными некоторым образом от 1 до n.

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

Выведите квадратную матрицу a порядка n. Элемент aij матрицы — это вероятность того, что участник i получит место j.

Ваш ответ будет засчитан, если абсолютная или относительная ошибка не превышает 10 - 6.

Примечание

Вероятностное распределение очков непрерывное. Это значит, что ничья невозможна.


Примеры
Входные данныеВыходные данные
1 2
1 6
4 9
0.9200000000 0.080
0.080 0.9200000000
2 8
0 2
1 3
2 4
3 5
4 6
5 7
6 8
7 9
0.875 0.125 0 0 0 0 0 0
0.125 0.750 0.125 0 0 0 0 0
0 0.125 0.750 0.125 0 0 0 0
0 0 0.125 0.750 0.125 0 0 0
0 0 0 0.125 0.750 0.125 0 0
0 0 0 0 0.125 0.750 0.125 0
0 0 0 0 0 0.125 0.750 0.125
0 0 0 0 0 0 0.125 0.875

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

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