問題の解決策
線路シミュレーション。人は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]は.num = 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。
}