#P50431. 「THUSC 2016」星露谷物语

「THUSC 2016」星露谷物语

Cannot parse: undefinedms error parsing time

题目描述

最近,小葱为了忘记城市的喧嚣,来到了星露谷开始种地发家致富。但是,由于小葱把钱都拿去抽卡了,所以小葱并没有足够的钱来买种子。为了搜集足够的钱来养猪,小葱必须开始大规模的搜寻野菜工作。

星露谷是一个无限大的二维平面,你可以在这个二维平面内任意移动。小葱可能在星露谷的 nn 条线段上找到野菜,但是这些线段是有向的,小葱必须沿着线段的方向移动才能找到野菜。为了找到更多的野菜,小葱希望自己能把星露谷中所有可能出现野菜的地方全部走一遍。换句话说,对于每条线段,小葱都需要沿着该线段的方向将这条线段的每个点都经过一遍。当然,小葱可以选择分多次走一条线段,具体地讲,小葱可以在这条线段的任意位置离开这条线段,再从任意位置进入这条线段,只要保证路径的并集覆盖了这条有向线段即可。

小葱希望找到一条尽量短的路径,这条路径应该由 mm 条线段组成,并且覆盖了星露谷中的 nn 条有向线段。小葱可以选择星露谷的任意一个点作为路径的起点,同时它也必须是路径的终点,即小葱最终必须回到出发的位置。

现在,小葱要去写四子棋大作业了,他不知道该怎么规划自己的行走方案使得自己移动的距离尽量短,所以就把这个艰巨的任务交给聪明的你了。

注意:如果有两条线段的某部分重合且方向相同,那么你在走过这一段的时候我们认为这两条线段的这部分都被走过了。

输入格式

第一行包含一个整数 nn,代表图中有向线段的数量。

接下来 nn 行,每行四个整数 x1,y1,x2,y2x_1,y_1,x_2,y_2 ,代表这条线段是一条从 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2) 的有向线段。

输出格式

第一行应包含一个整数 mm,代表小葱所走的折线路径中点的数量,需要满足 mmin(5n2,5×106)m\leq \min(5n^2,5\times 10^6)。 接下来 nn 行,按照路径的顺序依次输出路径上的点。每行应包含两个浮点数 x,yx,y,用来描述一个点的横、纵坐标。其中,x,yx,y 请保留不超过 55 位小数。

样例 1

3
0 0 0 100
0 100 100 100
100 100 0 0
4
0 0
0 100
100 100
0 0

小葱总共移动了 200+1002200+100\sqrt{2} 的距离,这也是这组样例的最优解。

3
0 0 0 100
1 51 1 49
0 100 0 0
5
0 0
0 100
1 51
1 49
0 100

在该组解中,小葱一共移动了 202+2402+2602202+\sqrt{2402}+\sqrt{2602} 的距离,但这并不是这组数据的最优解。

数据范围与提示

对于每组测试数据,如果你的输出格式不符合题目要求,或者你输出的路径并没有走完给定的条 nn 有向线段,那么该测试点得 00 分。否则,我们会计算你给出路径的长度 dd,并根据 1010 个评分参数 a1a2a10a_1\geq a_2\geq \cdots \geq a_{10} 计算你的得分:

max{idai,1i10}\max\{i\mid d\leq a_{i},1\leq i \leq 10\}

数据保证 a1a_1足够大,以确保一个合法的方案至少可以得到 11 分。