題解 AcWing 1494 銀行排隊

2021-10-19 11:00:33 字數 2089 閱讀 8420

原題傳送:acwing 1494. 銀行排隊

假設一家銀行有 k

kk 個服務視窗。

窗戶前面有一條黃線,將等候區分為兩部分。

所有客戶都必須在黃線後面排隊等候,直到輪到他/她服務並且有可用的視窗為止。

假定乙個視窗不能被單個客戶占用超過 1

11 小時,即如果某位顧客的業務已經辦理了一小時,則立即終止此項業務。

現在給定每個客戶的到達時間 t

tt 和業務辦理時間 p

pp,請計算所有客戶的平均等待時間。

輸入格式

第一行包含兩個整數 n

nn 和 k

kk,分別表示客戶數量以及視窗數量。

接下來 n

nn 行,每行包含兩個時間,分別是乙個客戶的到達時間,用hh:mm:ss表示,以及乙個客戶的業務辦理時間 p

pp(單位:分鐘)。

hh在 [00,

23]

[00,23]

[00,23

] 範圍內,mmss都在 [00,

59]

[00,59]

[00,59

] 範圍內。

所有客戶的到達時間均不相同。

請注意,銀行的營業時間為08:0017:00

任何人提前到達都必須排隊等候至08:00,而任何人來得太晚(在17:00:01或之後到達)都將不被服務也無需計入平均值。

注意只要客戶在17:00之前排上隊,則即使辦理業務時超過17:00,也會被服務。

輸出格式

輸出平均等待時間(單位:分鐘),結果保留一位小數。

注意,從到達銀行至開始辦理業務這一期間視為等待期間。

資料範圍

1 ≤n

≤104

1 \le n \le 10^4

1≤n≤10

4,1 ≤k

≤100

1 \le k \le 100

1≤k≤10

0 輸入樣例:

7 3

07:55:00 16

17:00:01 2

07:59:59 15

08:01:00 60

08:00:00 30

08:00:02 2

08:03:00 10

輸出樣例:
8.2
採用小頂堆解決排隊問題,初始化時間為08:00,即銀行開始營業的時間,並把時間轉成秒的格式方便計算。當前客戶業務開始時間為視窗開放時間和客戶到達時間的最大值,累加當前客戶的等待時間(客戶業務開始時間 - 客戶到達時間),然後將當前客戶業務結束時間(客戶業務開始時間 + 服務時間)放入小頂堆。注意到達時間超過銀行結束營業時間17:00的客戶不影響等待時間的平均值。

#include

using

namespace std;

const

int n =

10010

;int n, m, sum =

0, cnt =0;

struct person

}p[n]

;int

main()

;}priority_queue<

int, vector<

int>

, greater<

int>> windows;

for(

int i =

0; i < m; i++

)sort

(p, p+n)

;for

(int i =

0; i < n; i++

)printf

("%.1lf\n",(

double

)sum / cnt /60)

;return0;

}

ACwing 天才ACM 題解

題面入口 題目大意,將乙個數列劃分成最少的幾段,滿足每段內的資料集合中,取m對最大最小數出來,將其取出來的每對數求差值並平方,並求這m對的差值平方的求和值s,這個值不能超過指定的t。題目分析 從劃分後的集合中選出m對數,讓每對數的差的平方的和最大值為乙個貪心模型,我們只需要將集合中的元素按從小到大排...

題解 AcWing 1547 約會

原題傳送 acwing 1547.約會 大偵探福爾摩斯接到一張奇怪的字條 我們約會吧!3485djdkxh4hhge 2984akdfkkkkggedsb s hgsfdk d hyscvnm。大偵探很快就明白了,字條上奇怪的亂碼實際上就是約會的時間星期四14 04,因為前面兩字串中第 1 11 對...

題解 AcWing 1519 密碼

原題傳送 acwing 1519.密碼 為了準備pat,系統不得不為使用者生成隨機密碼。但是有時一些數字和字母之間總是難以區分,比如1 數字一 和l l ll 的小寫 0 數字零 和o o oo 的大寫 一種解決辦法是將1 數字一 替換為 將0 數字零 替換為 將l l ll 的小寫 替換為l,將o...