问题2586--登山

2586: 登山

[命题人 : ]
时间限制 : 1.000 sec  内存限制 : 64 MB

题目描述

有2个人站在一山脉的2头,处在同一水平位置。该山脉可以用下图的二维图来表示。他们尝试用一种特别的形式登上该山脉的顶峰。他们约定要保证任何时刻都处在同一水平位置。现在想请你来写一个程序为他们制定行走路线,尽量使路线的步数少。这里的步数不是现实中一般的概念,一步是指他们沿着向上或向下方向走的一段路,他们每转一次方向(由向上变向下或向下变为向上),则步数+1。

输入

第一行只有一个整数n(n <= 30)。 接着有n+1行坐标,每行有2个整数,分别为x,y坐标。每个坐标代表 山脉上的一个山峰或山谷。我们用(Xi,Yi)表示第i个坐标,i=1,...,n+1. 满足X1 < X2 < ... < Xn+1, Y1=Yn+1 < min(Y2,Y3,...,Yn).而且存在一个山峰(Xj,Yj),1 < j < n+1,满足Yj > max(Y1,...Yj-1,Yj+1,..., Yn+1).

输出

所求的的最小步数路线用一坐标序列来表示。第一行是一个整数m,表示坐标序列的转折点数。接下来的m行依次为m个行走路线中的转折点(转上下方向的点,包括起点和终点)。每个转折点用两个坐标表示,第一个坐标表示第一个人(开始时在(X1,Y1))的位置,第2个坐标表示第2个人(开始时在(Xn+1,Yn+1))的位置。坐标要求保留2位小数,四个数之间用空格分开。

样例输入 Copy

6
0 0
2 2
3 1
7 5
11 1
13 3
16 0

样例输出 Copy

6
0.00 0.00 16.00 0.00
2.00 2.00 14.00 2.00
3.00 1.00 15.00 1.00
5.00 3.00 13.00 3.00
3.00 1.00 11.00 1.00
7.00 5.00 7.00 5.00

来源/分类

yhr