Description
在一条单向公路上,有n个村庄,第i个村庄只能到i以后的村庄,而不能到i之前的村庄(因为是单行道)。新村长要建两条新路,使得各个村庄之间都能走通(一条反向的就可以,为什么要建两条?题目说了,只建一条不足矣增加自己的政绩),注意,一个村庄最多修建两条铁路
Input
第一行为村庄个数n,第二行为n-1个整数表示n-1个村庄与第一个村庄的距离
Output
第一行输出两条公路的总长,第二行输出两条公路的起点和终点
Sample Input
4
3 5 10
Sample Output
12
3 1 4 2
Solution
找出所有路段中最短的,加上原来的总长,就是答案。有一点要注意,题目说两条路的4个端点必须不同,因此要排除端点重合的问题。另外,n=2和n=3是无解的
Code
#include<stdio.h>
int main()
{
int n,x[50002],d[50002],i,j,flag,min=100000000;
scanf("%d",&n);
scanf("%d",&x[2]);
for(i=3;i<=n-1;i++)
{
scanf("%d",&x[i]);
d[i-1]=x[i]-x[i-1];//d[i]记录相邻两村庄间距
if(min>d[i-1])//更新最小间距和其位置
{
min=d[i-1];
flag=i-1;
}
}
scanf("%d",&x[n]);
if(n<4)//村庄个数小于4则无解
printf("0\n");
else//按格式输出
printf("%d\n%d %d %d %d\n",x[n]+min,flag+1,1,n,flag);
return 0;
}