关闭

POJ 2128 Highways(水~)

340人阅读 评论(0) 收藏 举报
分类:

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;
} 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:448009次
    • 积分:20774
    • 等级:
    • 排名:第427名
    • 原创:1692篇
    • 转载:0篇
    • 译文:0篇
    • 评论:68条
    最新评论