PAT(上級レベル)1014並んで待って

問題の解決策

  線路シミュレーション。人は17:00ではないの後にあれば、なおサービス開始、この出力は「申し訳ありません」でした。17時前に男は、これは問題ではありません、17:00以降も、サービスの終了場合は、サービスを開始しました。

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型 INF = 0x7FFFFFFFで構造体ノード
{ 
    int型NUM、finish_timeに。
    キュー < 整数 > 人。
}窓[ 25 ]。
ブールcmp_quesize(ノードX、ノードY)
{ 
    場合(x.people.size()=!y.people.size())
         戻り x.people.size()< y.people.size()。
    それ以外の
        戻り x.num < y.num。
} 
ブールcmp_finish(ノードX、ノードY)
{ 
    もし(!x.finish_time = y.finish_time)
         戻り x.finish_time < y.finish_time。
    それ以外の
        戻り x.num < y.num。
} 
整数 N、M、K、Q、SERVICE_TIME [ 1005 ]、保守、ANS [ 1005 ]。
POP();
無効 PUSH(int型P);
無効印刷(int型P);
INT のmain()
{ 
    int型私は、Qは、
    scanf関数(" %D%D%D%D "、&​​N、&M、&K&Q)。
    以下のための式(I = 1 ; I <= K; I ++)のscanf(" %dの"SERVICE_TIME [I]);
     のための(iは= 1、I <= N; I ++)ウィンドウ[i]は.nu​​m = I、窓[I] .finish_time = INF;
     のために(iは= 1 ; I <= K ; I ++ 
    { 
        場合(保守== N * M)
            POP(); 
        PUSH(I); 
    } 
    ながら(保守)POP();
     のために(iは= 0 ; I <Q、I ++ 
    { 
        scanf関数(" %dの"、&Q)、
        印刷(Q); 
    } 
    システム(" 一時停止" );
     戻り 0 ; 
} 
ボイドプリント(INT P)
{ 
    int型の和= 8つの * 60の + ANS [P]。
    もし(ANS [P] -service_time [P]> = 540)のprintf(" 申し訳ありませんが\ n " );
         のprintf(" %02D:%02D \ N "、サム/ 60、合計%60 ); 
} 
ボイド PUSH(int型P)
{ 
    保守 ++ 
    ソート(窓 + 1、窓+ N + 1 、cmp_quesize)。
    窓[ 1 ] .people.push(P)。
    もし(窓[ 1 ] .finish_time == INF)ウィンドウ[ 1 ] .finish_time = SERVICE_TIME [P]。
} 
ボイドPOP()
{ 
    int型一、二= 0 
    整備 - ; 

    ソート(窓 + 1、窓+ N + 1 、cmp_finish)。

    1 =ウィンドウ[ 1 ] .people.front()。
    窓[ 1 ] .people.pop()。
    ANS [1] =ウィンドウ[ 1 ] .finish_time。
    もし(!ウィンドウ[ 1] .people.empty())
    { 
        2 =ウィンドウ[ 1 ] .people.front()。
        窓[ 1 ] .finish_time + = SERVICE_TIME [2]。
    } 
         のウィンドウ[ 1 ] .finish_time = INF。
}

おすすめ

転載: www.cnblogs.com/VividBinGo/p/12237301.html