간단한 시뮬레이션 프로그램 대기열의 단일 멀티 윈도우 모드 :
은행 고객이 원하는 자유에 대기실 그렇지 않으면 거부 할 수있는 경우 액세스 고정 고객 대기실을 수용 할 수있는 N의 은행이 제공했다.
은행 창구 아무도 수를 호출하지 않는 경우 지역 대기 번호, 멀리 처음부터 비즈니스 여행 카운터의 대기 영역에 고객 대기실을 호출 할 때마다 전화 번호가 잘못되었습니다.
입력 형식 :
입력의 첫 번째 라인은 20보다 큰 양의 정수가 N
저장할 수있는 영역을 기다리고 뱅크 수를 나타내고,
다음 행이 "발생한 시간 순서의 숫자로 표현된다 顾客想进银行
"또는 " 叫号
"이벤트 포맷은 :
顾客想进银行
와In <id>
, 어디<id>
고객 번호, 크지 100,000 이하의 양의 정수;叫号
로Calling
표현입니다.
마지막 라인은 인 #
입력의 종료를 나타내는 기호.
참고 :
- 각 고객이 고유한지 확인하기 위해 제목 번호를 입력, 즉 : 고객이 이미 같은 수의 대기실에 일어나지 않을 것 은행의 고객에 가고 싶다.
- 이벤트 사이의 "동기화"문제를 고려해야 할 필요가 : 이벤트 후 특정 이벤트 후 보장은 전, 즉 완료되기 전에 발생합니다.
출력 형식 :
각각의 입력 이벤트를 동일한 순서로 라인, 즉 포맷의 경우에 결과 출력 :
顾客想进银行
고객이 입력하면, 출력<id> joined. Total:<t>
의는<id>
고객의 수이며,<t>
고객이 대기 영역의 번호를 입력 한 후顾客想进银行
문제 대기실이 가득하고 거부되면, 출력이<id> rejected.
있는<id>
고객의 수叫号
고객이 카운터에 가서 경우, 출력<id> called. Total:<t>
의이<id>
고객의 수이며,<t>
이후 카운터로 이동 영역을 기다리는 고객의 수叫号
아니, 대기실, 출력No one!
샘플 입력 :
3
In 101
In 102
In 103
In 104
Calling
In 105
Calling
Calling
Calling
Calling
#
샘플 출력 :
101 joined. Total:1 102 joined. Total:2 103 joined. Total:3 104 rejected. 101 called. Total:2 105 joined. Total:3 102 called. Total:2 103 called. Total:1 105 called. Total:0 No one!
코드 :
수입 큐 N = 평가 (입력 ()) m = 0 Q = queue.Queue () 진정한 동안 : 문자열 = 입력 () 스플릿 (). 만약 문자열 [0] == "#" 브레이크 ELIF 문자열 [0] = = "에서" : m <N 만약 m = m + 1 q.put (문자열 [1]) 인쇄 ( "{} 접합 합계 :. {}". 형식 (문자열 [1, m)) 다른 : 프린트 ( "{}는 거부."형식 (문자열 [1])). ELIF 문자열 [0] == "호출" 하는 경우 q.empty () : 인쇄 ( "아무도!") 그렇지 않으면 : m = m - 1 = q.get () 인쇄 ( "{}라고합니다.총 :. {} "형식의 (a, m))