青鱼有一个平面直角坐标系。在 x 轴上有 2n 个点,坐标从左到右分别为 (0,0),(1,0),…,(2n−1,0)。第 i 个点 (i−1,0) 的颜色为 ci。对于每种 1≤i≤n,颜色 i 恰好出现两次。
青鱼希望你在平面上画出 n 条曲线,第 i 条曲线连接两个颜色为 i 的点,且曲线之间互不相交,且所有曲线都和以 (0,0) 和 (2n−1,0) 为端点的线段不相交(除了曲线端点处;注意,这意味着本题中 n=1 时,直接用长度为 1 的线段连接 (0,0),(1,0) 是非法的)。“不相交”就是没有公共点。(如果对相交的定义有疑问,可以阅读下发的 checker)
本题中,为了输出方便,我们认为“曲线”就是由几段平行于坐标轴,且端点横纵坐标都是整数的线段构成的,具体见输出格式。下图是一个例子:
输入格式
第一行一个正整数 n。
第二行 2n 个正整数,第 i 个为 ci,表示 (i−1,0) 的颜色。
输出格式
若存在连接方法,在第一行输出 YES
。否则在第一行输出 NO
。注意所有字母都是大写。
如果输出了 YES
,还需要再输出 n 行,第 i 行按照如下格式输出:
- 假设颜色为 i 的两个点分别为 (x,0),(y,0),且 x<y。
- 第一个正整数为 k,表示连接 (x,0),(y,0) 的曲线分为多少段。
- 接下来从 (x,0) 开始,依次描述 k 段线段,第 i 段用一个字符(必须是
LRUD
中的一个)和一个正整数 z 描述,LRUD
分别表示向左((−1,0))右((1,0))上((0,1))下((0,−1))方向,表示这条线段是从上一条线段的末尾(最初位置为 (x,0) 开始)往该方向走 z 长度。
具体请参考样例输出。你需要保证 ∑k≤2×106,且所有输出的线段上任意一个点的坐标绝对值不超过 108。
如果输出了 YES
但是方案不正确,可以得到测试点 40% 的分数。注意,即使你不会输出方案,也需要输出一个符合格式的答案!
若输出了 NO
,不用再输出其它东西。
样例
输入 1
4
1 2 3 4 1 2 3 4
输出 1
YES
3 U 1 R 4 D 1
5 D 1 L 2 U 3 R 6 D 2
5 D 2 R 6 U 3 L 2 D 1
3 D 1 R 4 U 1
该样例和题目描述中的图片是一样的。
下面给出了一个可以得到 40% 分数的输出:
YES
1 U 1
1 U 1
1 U 1
1 U 1
输入 2
4
1 2 3 4 1 3 2 4
输出 2
NO
样例 3,4
见下发文件。注意,下发的输出文件只给出了 YES
或 NO
,没有给出具体方案。
输出检查器
下发文件里的 checker.cpp
可以检查你的方案是否合法,但不会检查 YES
或 NO
是否正确。用法是将 checker.cpp
和 testlib.h
放于同一目录下编译得到可执行文件,可执行文件与输入文件 input
与输出文件 output
放于同一目录下,然后执行 checker input output output
。
数据范围
本题捆绑测试。对于所有数据,1≤n≤2×105,1≤ci≤n,每种 ci 恰好出现两次。
性质 A:保证输出为 YES
的测试点都存在一种方案使得所有输出的曲线都不跨越 x 轴。
- 子任务 1(5 分)n≤2。
- 子任务 2(5 分)n≤3。
- 子任务 3(5 分)n≤4。
- 子任务 4(5 分)n≤7。
- 子任务 5(25 分)n≤1000,性质 A。
- 子任务 6(25 分)n≤1000。
- 子任务 7(10 分)性质 A。
- 子任务 8(20 分)无特殊限制。
时间限制:1s
空间限制:1024MB