#L3056. 「HNOI2019」多边形
「HNOI2019」多边形
题目描述
小 R 与小 W 在玩游戏。
他们有一个 边数为 的凸多边形,顶点按逆时针依次编号为 。
最初凸多边形中有 条线段,即多边形的 条边。
用有序数对 (其中 )表示端点分别为顶点 的线段。
游戏准备阶段
在游戏开始前,小 W 进行若干次操作:
每次选择两个互异顶点,连一条线段,且该线段 不与已有线段重合或相交(仅公共端点不算相交)。
直到无法继续连线,得到状态 。
此时 包含的线段为多边形的边与小 W 添加的线段,它们将多边形划分为若干个三角形区域。
对于任意一个三角形,其顶点为 (),给这个三角形一个 标号 。
这样每个三角形被标上 中的一个数,且没有标号相同的两个三角形。
旋转操作
定义「旋转」操作:
选定四个顶点 ,满足
且它们两两之间共有 条线段:
然后 删去线段 ,并 连上线段 。
用有序数对 唯一表示该次「旋转」,称为 旋转。
旋转后多边形中依然不存在相交的线段。
游戏过程
小 W 将初始状态 (或由其旋转一次得到的新状态)展示给小 R。
游戏开始后,小 R 每次可对当前状态进行一次「旋转」。
有限次旋转后,会得到一个无法继续旋转的状态,游戏结束。
将每次旋转对应的有序数对按顺序写下,得到该轮游戏的 操作方案。
题目任务
小 W 以 为基础,产生了 个新状态:
第 个状态 为对 进行一次 旋转后得到的状态。
你需要帮助小 R 求出:
- 分别以 作为初始状态时,完成游戏所需的 最少旋转次数。
- 如果 ,还需要求出 最少旋转次数的不同操作方案数(对 取模)。
输入格式
- 第一行:整数 ( 或 ),表示是否需要输出方案数。
- 第二行:正整数 ,表示凸多边形边数。
- 接下来 行:每行两个正整数 ,表示小 W 在 中连的一条线段(保证合法)。
- 接下来一行:整数 ,表示新状态个数。
- 接下来 行:每行两个整数 ,表示对 进行 旋转得到 。
输出格式
输出共 行:
- 若 ,每行一个整数,表示 的最少旋转次数。
- 若 ,每行两个整数:最少旋转次数、方案数(取模后)。
样例
输入
1
6
1 3
1 5
3 5
1
1 3
输出
3 2
3 1
解释
- 以 为初始状态:最少旋转次数 ,方案数 。
- 以 为初始状态:最少旋转次数 ,方案数 。
样例
输入
1
12
1 10
1 6
1 3
3 6
3 5
6 10
6 8
8 10
10 12
4
1 10
1 3
6 8
1 6
输出
8 210
7 210
8 70
8 105
8 140
数据范围
| 测试点编号 | |||
|---|---|---|---|
| – | 或 | 较小 | |
| – | |||
对于所有数据: