原題傳送: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
] 範圍內,mm
和ss
都在 [00,
59]
[00,59]
[00,59
] 範圍內。
所有客戶的到達時間均不相同。
請注意,銀行的營業時間為08:00
至17: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...