제목 설명
은행이 있다고 가정하면 K 윈도우 창 앞에 노란색 라인을 설정, 서비스를 제공, 도착 시간의 모든 고객은 노란 선은 긴 대기열에 배치 한 후. 윈도우가 유휴 상태 일 때, 공정 거래 창은 다음 고객입니다. 고객 가정 복수의 윈도우는 항상 때 대안 적으로, 낮은 번호의 윈도우를 선택한다.
이 질문의 서비스 요청 출력을 기다려야했다 마지막 시간을 완료, 평균 N 비트 고객의 대기 시간, 최대 대기 시간.
기입
입력 라인 (1)은 정수 양 제공 N ( ≤), 고객의 총 수를, 다음에 N 라인, 각 라인은 모든 고객의 도착 시간에 제공 T
및 처리 시간이 P
, 상기 입력 데이터가 도착하는 시간에 따라 이미 주문을 줄 것으로 가정 ; 마지막 줄은 양의 정수 준다 K를 ( ≤) 사업에 열 창문의 수.
수출
평균 대기 시간은 라인의 단부 사이의 공간으로 구분하여 출력 라인 (출력 소수점 장소), 최대 대기 시간, 마지막 완료 시간은, 여분의 공간이 없다.
샘플 입력
9 0 20 1 1 15 61 2 10 10 5 3 10 30 18 31 25 31 2 3
샘플 출력
6.2 17 62
신속한
사용법 #include <iostream> #INCLUDE <큐> #INCLUDE <iomanip> 사용 공간을 성병; INT queindex ( INT 총 큐 < INT > Q) { INT의 인덱스 = 0 ; 큐 < INT > 온도 = Q; 동안 (!의 temp.empty ()) { temp.pop (); 인덱스 ++ ; } 리턴 총 색인 + 1 ; } int 형 ) (주 { INT virclock = 0; 더블 averagewait = 0 ; INT maxWait = 0 ; INT alreadytime = 0 ; 큐 < INT > arrivetime; /// 로 고객의 시간 대기열 < INT > solvetime; /// 비즈니스 시간 할 INT의 T; CIN >> T를; INT 시간 대기가 [T]는; /// 대기 시간을 각각의 고객은, 초기화는 0 대 ( INT I = 0 ; I <T; I ++ ) 시간 대기 [I] = 0 ; 대 (INT 난 = 0 ; I <T는, I ++ ) { INT N, t는; CIN >> N >> t; (N) arrivetime.push; solvetime.push (t); } INT K; CIN >> K; 큐 < INT > 뱅크 [K]; 값 int = 이루어 0 ; 상태 (완료 == 0 ) { 위해은 ( INT는 전 = 0 ; I <K는, 난 ++ ) { 경우 (뱅크 [I] .empty ()) /// 银行有空位 { IF (! Arrivetime.empty () && arrivetime.front () <= virclock) /// 뱅크이었다 { 뱅크 [I] .push (solvetime.front는 ()) (arrivetime.pop) solvetime.pop는 () ; } } } INT bankemp = 0 ; /// 은행 및 여러 공석, 공석 기다리는 사람들이있는 경우 판단이 0 인 경우 에 대한이 ( INT I = 0 ; 나는 <K, I ++ ) 만약에 (은행 [I] .empty ()) bankemp ++ ; IF (bankemp == 0) { 큐 < INT > 임시 =이 arrivetime, 그동안 (! Temp.empty () && temp.front () <= virclock) /// 그는 같은 사람이 몇 클라이언트, 배열 플러스 대기 시간이 찾을 수있는 첫 번째 경우 { INT 번호를 = queindex (T, TEMP) 시간 대기 [수 - 1이다. ] + = 1이다. ] temp.pop (); } } 대 ( INT I = 0 ; I <K; I ++) /// 미소 처리 { IF (! 은행 [I] .empty ()) { INT 온도 = 뱅크 [I] .front () - 1 ; 뱅크 [I] .pop (); 뱅크 [I] .push (TEMP); 경우 (뱅크 [I] .front () == 0 ) { 뱅크 [I] .pop (); } } } INT EMP = 1 ; /// 判断是否完全结束 대 ( INT 난 = 0 ; I <K 단계; I ++ ) { 경우 (! 뱅크 [I] .empty ()) { EMP = 0 ; 휴식 ; } } IF (EMP == 1. && arrivetime.empty () && solvetime.empty ()) DONE = 1이다. ] virclock ++; /// 다음에 분 } 대 ( INT I = 0 ; I <T; I ++) / // 평균 대기 시간이 상기 최대 대기 시간을 계산 { IF (maxWait < 시간 대기 [I]) maxWait = 시간 대기 [I] averagewait + = 시간 대기 [I]을; } averagewait / = T; alreadytime =virclock; COUT << 고정 << setprecision ( 1 ) << averagewait << " " ; COUT << maxwait << " " ; COUT << alreadytime << ENDL; 반환 0 ; }