CF2122F Colorful Polygon

题目描述

给定一个数组 $a_1, a_2, \ldots, a_n$,其中 $n \leq 8$,并且 $a_1 + a_2 + \cdots + a_n \leq 100$。 请你构造一个**简单多边形** $^{\text{∗}}$,顶点数不超过 $333$,使得它恰好有 $$ \frac{(a_1 + a_2 + \cdots + a_n)!}{a_1! a_2! \cdots a_n!} $$ 种不同的**三角剖分** $^{\text{†}}$。可以证明总是存在这样的多边形。 $^{\text{∗}}$ 一个[简单多边形](https://en.wikipedia.org/wiki/Simple_polygon)是指没有自交且没有洞的多边形。换句话说,任意两条非相邻边没有公共点,相邻边恰好有一个公共点(即它们之间的顶点)。相邻边可以共线。 $^{\text{†}}$ 一个多边形的[三角剖分](https://en.wikipedia.org/wiki/Polygon_triangulation)是指选出 $m-3$ 条对角线($m$ 为顶点数),这些对角线只在顶点处相交。对角线是指多边形内部连接两个顶点的线段,且仅与多边形的边在端点处重合。

输入格式

每个测试用例的第一行包含一个整数 $n$($2 \leq n \leq 8$),表示数组的元素个数。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 100$),表示数组元素。 保证 $a_1 + a_2 + \cdots + a_n \leq 100$。

输出格式

第一行输出一个整数 $m$($3 \leq m \leq 333$),表示多边形的顶点数。 接下来 $m$ 行,每行两个整数 $x_i, y_i$($-10^6 \leq x_i, y_i \leq 10^6$),表示第 $i$ 个顶点的坐标。 多边形必须是简单多边形。顶点顺序可以是顺时针也可以是逆时针。

说明/提示

在第一个样例中,所需多边形必须有 $\tfrac{4!}{1! 1! 2!} = 12$ 种三角剖分。下图展示了该多边形的所有三角剖分: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2122F/3fdba588e3b6921298eb16b4d2cf2a74d4477034.png) 在第二个样例中,所需多边形必须有 $\tfrac{5!}{4! 1!} = 5$ 种三角剖分。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2122F/37e07df64c45ecffe9525467a15d7f721458acde.png) 翻译由 ChatGPT-4.1 完成。