#P16347. [2026年山东第二轮集训]计算几何题

[2026年山东第二轮集训]计算几何题

题目描述

给定一个周长为 360360 的圆环。每次你可以沿着一条直径或一条半径切一刀。经过若干次切割后,圆环会被分成若干段圆弧,设这些圆弧的弧长构成的可重集为 PP

输入给出一个大小为 nn 的可重集 QQ。要求 QQ 必须是 PP 的子集,并保证可重集 QQ 中只包含整数。

这里,可重集 QQ 是可重集 PP 的子集,是指对于任意 vRv\in\mathbb RQQvv 的出现次数不超过 PPvv 的出现次数。

请最小化切割次数,并构造一种达到最少切割次数的方案。

只输出最少切割次数,可以获得该子任务 60%60\% 的部分分。

输入格式

第一行一个整数 nn

第二行 nn 个整数 q1,q2,,qnq_1,q_2,\ldots,q_n

输出格式

第一行输出一个整数 mm,表示最少切割次数。

接下来 mm 行输出你构造的方案。每行输出两个整数 αi,tpi\alpha_i,tp_i,满足

0αi<360,0tpi1.0\le \alpha_i<360,\qquad 0\le tp_i\le 1.
  • tpi=0tp_i=0 时,表示这一刀沿半径切,即从圆心出发的一条射线。其方向由 αi\alpha_i 描述:从穿过圆心的水平直线与圆环的交点出发,沿逆时针方向走到射线与圆环的交点,所经过圆弧的弧长为 αi\alpha_i
  • tpi=1tp_i=1 时,表示这一刀沿直径切,即一条穿过圆心的直线。其方向由 αi\alpha_i 描述:从穿过圆心的水平直线与圆环的交点出发,沿逆时针方向走到该直线与圆环的任意一个交点,所经过圆弧的弧长为 αi\alpha_i。无论选择该直线的哪一个交点,描述的都是同一条直线。

注意:即使你只希望回答最少切割次数,也必须继续输出 mm 行,并保证每行的两个整数符合范围要求。输出格式不正确可能获得 00 分。

在题意中,αi\alpha_i 可以取任意实数;输出中将其限定为整数,是因为可以证明一定存在一组最优解,使所有 αi\alpha_i 均为整数。你必须构造这样的一组方案。

样例

样例 1

输入

1
90

输出

2
0 0
90 0

数据范围

$$1\le n\le 16,\qquad 1\le q_i\le 360,\qquad \sum_{i=1}^{n}q_i\le 360.$$

子任务

子任务编号 nn\le 特殊性质 分值
1 22 10
2 1616 A
3 B 20
4 88
5 1010
6 1616

特殊性质:

  • A: 对所有 1in1\le i\le n,均有 20qi20\mid q_i
  • B: i=1nqi=360\displaystyle\sum_{i=1}^{n}q_i=360