Highways(Zoj 2433)

題目鏈接

                                                                             Highways


Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge


In a distant country Lineland there are N cities and they are all located along the highway. The highway is a straight line; it starts from the first city and runs through the second, third city and so on, ending in the N-th city. The i-th city is located at the distance of Xi miles from the first one.

The highway is wide and smooth, so it is a pleasure for all people to drive along it. But there is one problem - all roads in Lineland, including the highway, are one-way. So people are only allowed to drive along the highway from the city with smaller number to the city with greater number and they have to use country roads to get back, and that is not such a great pleasure indeed.

After the new president Mr. Pathwayson was elected in Lineland, he has decided that he would like to make it easier for people to get from one town to another. But he does not dare to change the traditions, and make the highway two-way. Therefore he has decided to build new highways to connect the cities, so that it would be possible to get from any city to any other one by highways. Traditionally, the new highways must be one-way.

Of course, Mr. Pathwayson is a great president, and he wants people to remember him in years. After a thought he has decided that building just one highway would not be enough for that. Therefore he has decided that he must build two new highways. Each highway would connect two different cities. Since people are anxious about their health, and cars running along the highway produce dangerous wastes, each new highway must not pass through any cities, except the cities it connects. Also building two new highways in one city would disturb people too much, so all the cities that would be the ends of the new highways must be different.

You are the assistant of the minister of transportation of Lineland, so you are asked to choose the cities to be connected by the new highways. Since the cost of building a highway is proportional to its length, the total length of the highways must be minimal possible. Write a program to solve this problem. You may assume that the distance between two cities along the new highway is equal to the distance between those cities along the main highway.


Input

The first line of the input contains N (2 <= N <= 50,000).

Next line contains N-1 integer numbers: X2, X3, ..., XN (1 <= X2 < X3 < ...< XN <= 10^9).


Output

If it is impossible to build the highways satisfying all requirements, print number 0 on the first line of the output.

In the other case on the first line of the output file print the minimal possible total length of the highways to be built. On the second line print S1, E1, S2 and E2 - the numbers of the cities to connect by the first and the second highway, respectively. Note that highways are one-way and must run from S1 to E1 and from S2 to E2.


This problem contains multiple test cases!

The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.

The output format consists of N output blocks. There is a blank line between output blocks.


Sample Input

1

4
3 5 10


Sample Output

12
3 1 4 2

題意:

   在一個很遙遠的國家,有N個城市都坐落在公路旁邊。公路是直線的,它從第一個城市開始,通過第二個,第三個,直到第N個。第i個城市在距離第一個Xi米處。 但是公路是單向的,人們只能從小號碼城市開車到大號碼城市(按照編號順序)。 有個人人決定新建2條公路,使得每個城市可以相互走。每條新公路不能通過第三個城市。同時每個城市至多是一條公路的盡頭。 
要求寫出來一個程序,滿足所有的要求,同時要使得成本最低。
 

思路:

首先城市數不能少於4,如果少於4,輸出0。第一座城市和最後一座城市必須相連,那麼就從中間找出最短的間隔長度加上第一座城市到最後一座城市的全長就行了。

 

溫馨提示:注意輸出的格式哦。

 

樣例解釋:

1是下邊一組樣例

4是有四個城市

3 5 10 分別是第二個、第三個、第四個城市到第一個城市的距離。

 

我們現在建的兩條路是4------>2    和  3  --------> 1,4------>2   的距離是7  , 3  --------> 1 的距離是5,所以先輸出的爲12

然後我們輸出兩條路的編號。

 

代碼如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#define maxn 1000000001
using namespace std;
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        int n , mi , p , c , t , i;
        cin >> n;
        mi = maxn;
        p = 0 ;
        for(int j = 1 ; j < n ; j ++)
        {
            cin >> c;
            t = c - p;
            p = c ;
            if(j != 1 && j != n - 1 && t < mi)
            {
                mi = t;
                i = j;
            }
        }
        if(mi == maxn)
            cout<<"0"<<endl;
        else
        {
            cout<<c + mi << endl;
            cout<<i + 1 << " 1 " << n << " "<< i<<endl;
        }
        if(T)
            cout<<endl;
    }
    return 0 ;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章