Годинник | |
TRIANG
|
Задача Триангуляция (TRIANG)Триангуляцией выпуклого многоугольника называется разбиение многоугольника попарно непересекающимися диагоналями на треугольники. Степенью вершины относительно заданной триангуляции будем считать количество диагоналей, которые исходят из этой вершины.Задан правильный N-угольник. Пронумеруем все вершины в порядке обхода против часовой стрелки натуральными числами от 1 до N. Пусть заданы неотрицательные целые числа d1, d2, …, dN. Требуется определить, существует ли хотя бы одна такая триангуляция, что для каждого i вершина i имеет относительно нее степень di, и если существует, то указать любую из них.Выведите диагонали, задающие искомую триангуляцию. Каждая диагональ задается двумя числами – номерами вершин, которые соединяет эта диагональ. Каждая диагональ должна выводиться в отдельной строке. Номера вершин разделяются одним пробелом. В случае, если триангуляции с заданными степенями вершин не существует, выведите одно число 0.Технические условия. Программа TRIANG в первой строке читает с клавиатуры целое число N (3≤N≤200000), во второй строке – N целых чисел d1, d2, …, dN (0≤di≤N). Программа выводит на экран К – количество диагоналей, задающих искомую триангуляцию, а далее – K строк с диагоналями. Каждая диагональ задается двумя числами – номерами вершин, которые соединяет эта диагональ и выводится в отдельной строке. Номера вершин разделяются одним пробелом. В случае, если триангуляции с заданными степенями вершин не существует, выведите одно число -1.Пример:
Ввод |
Вывод |
61 0 2 1 0 2 |
3 1 33 64 6 |
52 0 2 0 2 |
-1 |
|
|
|