原题:OpenJudge - 687:Color Tunnels
翻译:
描述:一家生产玩具的公司有一套复杂的系统来油漆产品。为了获得所需的颜色,产品必须按照指定的顺序涂上几种颜色。每个产品都是通过颜色隧道来上色的。对于每种颜色,至少有一个通道使用该颜色进行绘制(可能会有更多)。隧道分布在喷涂区域,产品必须从一个隧道运送到另一个隧道,才能喷涂给定的颜色。当喷漆过程开始时,产品处于生产工厂的某个点,最终必须交付到产品仓库;
正式来说,未着色的成品在源点上,必须在按照给定的顺序涂上不同的颜色后才能运送到另一个目的点。有若干个隧道,每个隧道都被认为是同时运行的,隧道都有特定的颜色,但颜色不一定是截然不同的。设< c1,c2,……,cn >是产品要涂的n种颜色的序列。产品需要通过< t1,t2,……>使得ti的颜色是ci。注意,有可能穿过隧道而不被上色,因此,实际上,上述的< t1,t2,...,tn >都可能是产品通过的隧道的子序列。产品通过隧道的方向不重要。目标是在颜色的限制下找到从源点到目的地的最短路径。这条路可能会穿过自己,甚至穿过隧道。也允许两次(或更多次)通过隧道。
注意!两条隧道可以交叉或重叠,但它们是不同的;
输入:包含若干个测试用例。输入的第一行是一个不大于20的正整数t,表示测试用例的数量。第一行后面是t个测试用例的数据。每个测试用例的第一行包含四个实数xs,ys,xt,yt,它们分别是源和目的地的x和y坐标。第二行包含颜色序列:第一个数字是序列的长度,范围是[1,30],剩下的一行是序列本身。序列中的每种颜色都是范围为[1,100]的整数.第三行包含范围[1,60]的一个整数,表示隧道数量,后跟n行,每行包含五个数字。前两个数字是隧道一端的x和y坐标。第三和第四个数字是另一端的x和y坐标。坐标是实数。第五个数字属于[1,100];
输出: 有t行,每一行包含从源点到目的地路径的最小长度,受问题的约束。该长度将在小数点后三位数的精度范围内与最佳长度进行比较。