`Всеукраїнський центр проведення олімпіад в мережі Інтернет

Задача Триангуляция (TRIANG)

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

© LIKT 1998-2024