1. 程式人生 > >2018普及組-T3 擺渡車

2018普及組-T3 擺渡車

題目描述

有 nn 名同學要乘坐擺渡車從人大附中前往人民大學,第 ii 位同學在第 t_it
i
​ 分鐘去 等車。只有一輛擺渡車在工作,但擺渡車容量可以視為無限大。擺渡車從人大附中出發、 把車上的同學送到人民大學、再回到人大附中(去接其他同學),這樣往返一趟總共花費mm分鐘(同學上下車時間忽略不計)。擺渡車要將所有同學都送到人民大學。

凱凱很好奇,如果他能任意安排擺渡車出發的時間,那麼這些同學的等車時間之和最小為多少呢?

注意:擺渡車回到人大附中後可以即刻出發。

輸入輸出格式

輸入格式:
第一行包含兩個正整數 n,mn,m,以一個空格分開,分別代表等車人數和擺渡車往返 一趟的時間。
第二行包含 nn 個正整數,相鄰兩數之間以一個空格分隔,第 ii 個非負整數 t_it i​ 代 表第 ii 個同學到達車站的時刻。

輸出格式:
輸出一行,一個整數,表示所有同學等車時間之和的最小值(單位:分鐘)。

輸入輸出樣例

輸入樣例#1: 複製
5 1
3 4 4 3 5
輸出樣例#1: 複製
0
輸入樣例#2: 複製
5 5
11 13 1 5 5
輸出樣例#2: 複製
4
說明

【輸入輸出樣例 1 說明】

同學 11 和同學 44 在第 33 分鐘開始等車,等待 00 分鐘,在第 33 分鐘乘坐擺渡車出發。擺渡車在第 44 分鐘回到人大附中。
同學 22 和同學 33 在第 44 分鐘開始等車,等待 00 分鐘,在第 44 分鐘乘坐擺渡車 出發。擺渡車在第 55 分鐘回到人大附中。
同學 55 在第 55 分鐘開始等車,等待 00 分鐘,在第 55 分鐘乘坐擺渡車出發。自此 所有同學都被送到人民大學。總等待時間為 00。

【輸入輸出樣例 2 說明】

同學 33 在第 11 分鐘開始等車,等待 00 分鐘,在第 11 分鐘乘坐擺渡車出發。擺渡 車在第 66 分鐘回到人大附中。
同學 44 和同學 55 在第 55 分鐘開始等車,等待 11 分鐘,在第 66 分鐘乘坐擺渡車 出發。擺渡車在第 1111 分鐘回到人大附中。
同學 11 在第 1111 分鐘開始等車,等待 22 分鐘;同學 22 在第 1313 分鐘開始等車, 等待 00 分鐘。他/她們在第 1313 分鐘乘坐擺渡車出發。自此所有同學都被送到人民大學。 總等待時間為 44。
可以證明,沒有總等待時間小於 44 的方案。

AC程式碼,抄的,原地址為:

https://www.cnblogs.com/yzhang-rp-inf/p/9769530.html

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int a[10000]={0};
    for (int i=0;i<n;i++){
        cin>>a[i];
    }
    
    sort(a,a+n);
    
    int i=0;
    int ans=0,d=a[0];
    while (i<n){
        int j=1;
        while (a[i]==a[i+1]&&i<n){
            j++;
            i++;
        }
        ans+=(d-a[i])*j;
        d+=m;
        i++;
    }
    cout<<ans;
    return 0;
}