zoj2433

题目大意:

在一个遥远的国家,有N个城市都坐落在公路旁边。公路是直线的,它从第一个城市开始,通过第二个,第三个,直到第N个。第i个城市在距离第一个Xi米处。
但是公路是单向的,人们只能从小号码城市开车到大号码城市。
Mr. Pathwayson决定新建2条公路,使得每个城市可以相互走。每条新公路不能通过第三个城市。同时每个城市至多是一条公路的尽头。
写一个程序,满足所有的要求,同时要使得成本最低。

解题思路:

如果城市数量小于4个,肯定不可以。否则,知道距离最小的两个城市k+1和k+2。肯定要包含第一个城市和最后一个城市,然后k+2连到城市1,城市n连到k+1。距离等于最后一个城市的坐标加上两个城市的距离。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{
  int n,N,a[50005],b,c,sum,min,k,i;
  scanf("%d",&N);
  while(N--)
  {
    scanf("%d",&n);
    c=0;
    for(i=0;i<n-1;i++)
    {
      scanf("%d",&b);
      a[i]=b-c;
      c=b;
    }
    min=a[1];
    k=1;
    for(i=2;i<n-2;i++)
    {
      if(min>a[i])
      {
        min=a[i];
        k=i;
      }
    }
    sum=min+c;
    if(n<4)
     printf("0\n");
    else
    {
     printf("%d\n%d 1 %d %d\n",sum,k+2,n,k+1);
    } 
    if(N)
     printf("\n");
  }
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值