#1823. [合肥市] 小 C 切蛋糕(cake)

    ID: 1823 传统题 文件IO:cake 1000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>2021合肥市初中组计算几何三角剖分

[合肥市] 小 C 切蛋糕(cake)

题目描述

一年一度的生日又到了。

CC 准备请他的小 LL,小 WW 等众多朋友们吃蛋糕。

由于预计有 n2n-2 个人在场,小 CC 就买了份正 nn 边形的大蛋糕。nn 个顶点上均有草莓、 黄桃、葡萄三种水果中的一种。保证蛋糕中三种水果均出现并且任意相邻的两个顶点上水果种类不同。

CC 现在要切 n2n-2 块蛋糕,每人一块,他要求:每块蛋糕都是三角形; 各个顶点上都有水果,且包含所有的种类。

在这样苛刻的条件下,小 CC 等价于要对蛋糕做一个 nn 边形的三角剖分,使得里面的 n2n-2 个子三角形三个顶点的水果种类各异。请你告诉他一组合法的剖分方式,使得满足小 CC 的要求。可以证明:在前面的保证下,必然存在一组解。

n 边形的三角剖分指在 nn 边形内部选择 n3n-3 条对角线连接后,形成的所有 n2n-2 个三 角形,其顶点均为 nn 边形的顶点。显然剖分选取的 n3n-3 条对角线两两间要么不交,要么仅仅在端点处相交。

本题将使用 SpecialSpecial JudgeJudge。只要你的答案合法、正确,将会获得该测试点的全部分数。

输入格式

从文件 cake.in 中读取数据。

共两行,第一行一个正整数 nn,表示一个正 nn 边形,顶点从 11nn 按顺时针依次编号;

第二行有 nn 个整数 aia_i ,其中用数字 11 表示草莓,22 表示黄桃,33 表示葡萄。aia_i 表示第 ii 个顶点上水果的种类。

输出格式

输出到文件 cake.out 中。

n3n-3 行,每行两个数 u,vu,v,表示剖分包括边 (u,v)(u,v)。你需要满足 1u,vn1≤u,v≤n,且 uvu≠vuuvv 在原多边形上不相邻。

n3n-3 条边描述了一组三角剖分,你需要满足其是一组合法的三角剖分,并且满足所有 n2n-2 个剖分得到的三角形,三个顶点均含有三种水果,否则会导致答案错误。

样例

5
1 2 3 2 3
1 3
1 4

解释#1

如图所示,使用红色表示草莓,黄色表示黄桃,紫色表示葡萄。

说明

6
1 2 3 1 2 3
2 4
4 6
6 2

解释#2

如图所示。

说明

方案不唯一。

数据范围

  • 对于 10%10\% 的数据:n=4n=4
  • 对于 25%25\% 的数据:n15n≤15
  • 对于另外 5%5\% 的数据:保证只有一个顶点上的水果为草莓。
  • 对于 70%70\% 的数据:n103n≤10^3
  • 对于 100%100\% 的数据:4n5×1054≤n≤5×10^5ai=1,2,3a_i=1,2,3

校验器

为了方便选手测试,在 cake 目录下我们下发了可执行文件 checker(无后缀名)(在这里,请于linux下运行)。 选手可以将输入文件(文件名必须是 cake.in)和输出文件(文件名必须是 cake.out)与该可执行文件位于同一目录下,在对应窗口空白处右键“在终端打开”,在出现的终端中 输入“./checker”,运行后会将结果反馈给选手。

反馈的结果有以下可能:

  • Correct:答案正确;
  • Wrong Answer:答案错误(答案不合题意等);
  • Invalid Format:格式不合法(输入不合法、输入输出超出数据范围等);
  • Not Found ’cake.in/out’ :未找到输入/输出文件。