銀行のA1017・キューイング(25分)
タイトル内容
銀行がサービスのためのKの窓が開いていたとします。二つの部分に待合室をデバイドの窓の前に黄色の線があります。すべての顧客は、サービスされる彼/彼女のターンで、利用可能なウィンドウが存在するまで、黄色のラインの後ろに並んで待たなければなりません。何のウィンドウが1時間以上単一の顧客によって占められていないことができるものとします。
今、到着時間Tと各顧客の処理時間Pを与え、あなたはすべての顧客の平均待ち時間を伝えることになっています。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。N(≤10:それぞれの場合のために、最初の行は、2つの数字含ま4 -顧客の総数、及びK(≤100) -ウィンドウの数)。その後、N行は、それぞれが2倍含まれ、従ってください:HH:MM:SS -顧客の数分で処理時間-到着時間、およびPを。ここでHH範囲の[00、23]であり、MMおよびSSは[00、59]の両方です。何の2人の顧客が同時に到着しないものとします。
銀行は8時から午後5時00分に開くことを確認します。誰もが早い午前8時00分まで並んで待たなければならない、と誰もが(時または17時00分01秒後)遅すぎる来る平均に役立っもカウントされないだろうに到着します。
出力仕様:
各テストケースの場合は、数分で、1行にすべての顧客の平均待ち時間を印刷し、小数第1位まで正確に。
サンプル入力:
7 3
七時55分00秒16
午前17時○○分01秒2
7時59分59秒15
午前八時01分00秒60
八時00分00秒30
8時00分02秒2
午前八時03分00秒10
サンプル出力:
8.2
トピック分析
この質問は、実際にアイデアがこれ以上17:00以下の到着時間あれば結局、同様の問題の最初の30分にそうであった、という考えは非常に似ていることに留意すべきである、非常に難しいことではありません、そしてそれを超える17:00に終了しますケースは考慮されるべきですが、17:00に、チームは人が待機し続けるべきかどうかに排出されていない場合、私は疑問を持っていますか?常識ではありませんが、常識に従って質問ヘッドが間違っています。。。ウィンドウが終了時刻午前17時00分よりも大きい場合、私は、人々がサービスを持っていないので、ああ、明らかに少し愚か待ち続け、終了17:00である必要があり、その後戻って顧客に時間を待って、裁判官を追加して明らかに、シミュレーションの質問のために、私はデザインはここに非常に良いではないと思います。
この質問は、あなたが何のウインドウができることを前提としているタイトルを与えることを忘れている場合我々は、試すことができ、別の小さなバグがあると思われる時間1以上にわたって単一の顧客によって占められていない個々の治療を判断してはいけない条件プロセスは時間以上で、この質問にはまだACすることができ、私は、この条件に注意を払っていないし始めた最後のテストポイントは、それはここでの問題だと思ったしていなかったが、それでも変更していませんでした。最後に、私は数分ではなく数秒で基本的な単位として削除コードの前に与えた(私は比較部としてのポイントを使用し始め、あまりにも多くのトラブルは、私はない疑う最後の点Aとやや関連)、アウト、私は意図的にまだ見つける削除滞在する人それぞれの1時間以上である裁判官の時間の前にコードを置きます。。。これは明らかに、この条件を忘れてしまったテストシステムで、興味を持って誰もが試すことができます。
〜ああ、私は良いアイデアを開いてみたかったが、上記の二つの理由に基づいて、そのプロセスの問題は非常によく
特定のコード
#include<stdio.h>
#include<stdlib.h>
int endtime[105] = { 0 };
struct person
{
int sec;
int pro;
};
struct person p[10010];
int N, M;
int all_wait = 0;
int cmp(const void *p, const void *q)
{
return ((struct person*)p)->sec - ((struct person*)q)->sec;
}
int main(void)
{
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
{
int h, m, s, t;
scanf("%d:%d:%d %d", &h, &m, &s, &t);
if (t * 60 > 3600)
p[i].pro = 60 * 60;
else
p[i].pro = t * 60;
p[i].sec = h * 60 * 60 + m * 60 + s;
}
for (int i = 0; i < M; i++)
{
endtime[i] = 8 * 60 * 60;
}
int i;
qsort(p, N, sizeof(struct person), cmp);
for (i = 0; (i < N) && (p[i].sec <= 17 * 60 * 60); i++)
{
int earliest = 0;
for (int j = 0; j < M; j++)
if (endtime[j] < endtime[earliest])
earliest = j;
if (p[i].sec < endtime[earliest])
{
all_wait += endtime[earliest] - p[i].sec;
endtime[earliest] += p[i].pro;
}
else
endtime[earliest] = p[i].sec + p[i].pro;
}
if (i)
printf("%.1f", all_wait / 60.0 / i);
else
printf("0.0");
system("pause");
}