eolymp
bolt
Try our new interface for solving problems
Məsələlər

Последовательность триангуляции

Последовательность триангуляции

\textit{Триангуляцией }многоугольника называется проведение набора отрезков между его вершинами таким образом, чтобы разбить многоугольник на треугольники. Отрезки должны лежать внутри многоугольника, не пересекаться между собой, и касаться сторон многоугольника только в вершинах. Например: \includegraphics{https://static.e-olymp.com/content/86/866d54d9171ba16de4eac726851303285f906fb4.jpg} В примере жирной линией показаны границы многоугольника, а тонкой приведены триангуляции. При каждой триангуляции многоугольника с \textbf{n} вершинами получается \textbf{(n-2)} треугольника. \textit{Треугольная последовательность }триангуляции получается, если начав с некоторой вершины, и двигаясь вокруг многоугольника последовательно по его вершинам, записывать количество инцидентных им треугольников. Для выше приведенного примера такими последовательностями будут (начиная сверху, слева): \textbf{A: 1 3 1 3 1 3} \textbf{B: 2 2 1 4 1 2} \textbf{C: 1 2 3 2 1 6 1 2 3 2 1 6} Напишите программу, которая по последовательности из \textbf{n }натуральных чисел определит, является ли она треугольной последовательностью триангуляции многоугольника из \textbf{n }вершин. Если ответ положительный, то следует вывести список треугольников в триангуляции в лексикографическом порядке. \InputFile Первая строка содержит количество тестов \textbf{p }(\textbf{1 }≤ \textbf{p }≤ \textbf{1000}). Каждый тест состоит из одной строки, которая содержит номер теста \textbf{k}, количество чисел в последовательности \textbf{n} (\textbf{4} ≤ \textbf{n} ≤ \textbf{20}), а также сами \textbf{n }целых чисел последовательности в соответствующем порядке, разделенные пробелом. \OutputFile Для каждого теста вывести несколько строк. Если входная последовательность \textbf{НЕ} является \textit{треугольной} для \textbf{n}-угольника, то вывести номер теста \textbf{k}, пробел и заглавную букву \textbf{N}. Иначе в первой строке вывести номер теста \textbf{k}, пробел и заглавную букву \textbf{Y}. Далее вывести \textbf{n - 2} строки, содержащих индексы вершин треугольников в триангуляции, по одному треугольнику в строке, индексы вершин выводить в возрастающем порядке. Треугольники сначала следует отсортировать лексикографически. Если \textbf{k }< \textbf{l }< \textbf{m }- индексы вершин одного треугольника, а \textbf{r }< \textbf{s }< \textbf{t }- индексы вершин второго, то первый треугольник предшествует второму в лексикографическом порядке, если: \textbf{k < r OR (k == r AND l < s) OR (k == r AND l == s AND m < t)}
Zaman məhdudiyyəti 1 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB
Giriş verilənləri #1
4
1 6 1 3 1 3 1 3
2 6 1 3 2 2 1 3
3 12 1 2 3 2 1 6 1 2 3 2 1 6
4 20 1 2 3 2 1 6 1 2 3 2 1 6 1 3 2 2 1 3 1 2
Çıxış verilənləri #1
1 Y
1 2 6
2 3 4
2 4 6
4 5 6
2 N
3 Y
1 2 12
2 3 12
3 4 6
3 6 12
4 5 6
6 7 8
6 8 9
6 9 12
9 10 12
10 11 12
4 N
Mənbə 2013 ACM Greater New York Region, Октябрь 27, Задача G