题目
一条很长的尺子,上面标记着整数点的坐标。如:
现在给出n条线段,每条线段表示为x—y(x和y为整数,x<=y),两条线段能合并的条件是x—y,y—z,合并为x—z。比如线段2—4和线段4—6可以合并为线段2—6。(线段2—4和线段3—6则不可以合并为线段2—6)
求最终能合并的最长的线段,且输出这条最长的线段是由多少条小线段组成的。
比如有6条线段:2—7,1—3,3—12,12—20,7—10,4—50
那么可以合并成以下线段:
1—3,3—12,12—20 长度为20-1=19 由3个线段组成
2—7,7—10 长度为10-2=8 由2个线段组成
4—50 长度为50-4=46 由1个线段组成
那么最长的一条就是第三个,所以结果为46,1。
需要注意的是:如果有两条不一样的连续的线段长度同时为最大,那么取组成线段数多的一条。
例子:1—5,5—10,1—10,输出: 9,2
思路:假设有n条线段,建立2个数组,一个b[ ]为前面那个数,一个p[ ]为后面那个数,设找配对条为第 i 条,被配对为第 a 条,第一次我们可以拿第1条轮流与其他的线段配对,第二次拿第2条以此类推到第n条。一条线段与另一条线段配对后,如1-2与2-4,就将末尾的p[ i ]从2变为4,然后拿4与其他线进行配对, 之后将其比较出最长的一条线。