3 - 08. 창고 시 뮬 레이 션 대기 열 (25)

3093 단어 oj데이터 구조
3 - 08. 창고 시 뮬 레이 션 대기 열 (25)
시간 제한
400 ms
메모리 제한
65536 kB
코드 길이 제한
8000 B
문제 풀이 절차
Standard
이미 알 고 있 는 두 개의 스 택 S1 과 S2 를 설정 합 니 다. 이 두 개의 스 택 으로 하나의 대기 열 Q 를 모 의 하 십시오.
스 택 으로 대기 열 을 모 의 하 는 것 은 스 택 의 다음 작업 함 수 를 호출 하 는 것 입 니 다.
(1) int IsFull (Stack S): 스 택 S 가 가득 찼 는 지 판단 하고 1 또는 0 으로 돌아 갑 니 다.(2) int IsEmpty (Stack S): 스 택 S 가 비어 있 는 지 판단 하고 1 또는 0 으로 돌아 갑 니 다.(3) void Push (Stack S, Element Type item): 원소 item 을 창고 S 에 눌 러 넣 기;(4) Element Type Pop (Stack S): S 의 스 택 상단 요 소 를 삭제 하고 되 돌려 줍 니 다.
대열 에 들 어 가 는 void AddQ (Element Type item) 와 나 가 는 Element Type DeleteQ () 를 실행 합 니 다.
형식 설명 입력:
입력 은 먼저 두 개의 정수 N1 과 N2 를 주 고 스 택 S1 과 S2 의 최대 용량 을 표시 합 니 다.그 다음 에 일련의 대기 열 동작 을 보 여 줍 니 다. "A item" 은 item 을 정렬 하 는 것 을 표시 합 니 다. (여기 서 item 을 전체 숫자 로 가정 합 니 다)"D" 는 팀 조작 을 나타 낸다.'T' 는 입력 이 끝 났 음 을 나타 낸다.
출력 형식 설명:
입력 한 모든 "D" 동작 에 대해 해당 팀 의 숫자 나 잘못된 정보 인 "ERROR: Empty" 를 출력 합 니 다.입단 작업 이 실행 되 지 않 으 면 'ERROR: Full' 도 출력 해 야 한다.출력 마다 한 줄 을 차지 합 니 다.
샘플 입 출력:
번호
입력
출력
1
2 2
A 1 A 2 D D T
1
2

2
3 2
A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T
ERROR:Full
1
ERROR:Full
2
3
4
7
8
ERROR:Empty

두 개의 스 택 시 뮬 레이 션 대기 열:
스 택 a 와 b, a 는 입대, b 출 대 에 사용 된다.
(1) 판 대 만: a 가 꽉 차고 b 가 비어 있 지 않 으 면 팀 이 꽉 찬다.
(2) 판 대 공: a 와 b 가 모두 비어 있 으 면 팀 이 비어 있다.
(3) 입단: 먼저 팀 이 꽉 찼 다.
    만약 팀 불만: (1) 스 택 a 불만 이 있 으 면 바로 스 택 a
                        (2) a 가 가득 차 면 a 의 모든 요 소 를 스 택 b 에 팝 업 한 다음 에 요 소 를 스 택 a 에 넣 습 니 다.
(4) 파티: (1) b 가 비어 있 으 면 a 의 모든 요 소 를 스 택 b 에 팝 업 한 다음 스 택 에서 나 옵 니 다.
                      (2) b 가 비어 있 지 않 으 면 바로 b 에서 원 소 를 꺼 냅 니 다.
/*      */
#include 
#include 
#include 

using namespace std;
stacks1;
stacks2;

int main(){
	int m,n,i,a;
	char c;
	cin >> m >> n;
	if(m > n){
		int tmp;
		tmp = m;
		m = n;
		n = tmp;
	}
	getchar();
	for(i = 0;; i++){
		cin >> c;
		if(c == 'T')
			return 0;/*    */
		if(c == 'A'){
			cin >> a;
			if((s1.size() == m)&&(s2.size()!=0)){/*  */
				cout << "ERROR:Full" << endl;
			}
			else{
				int len1,t;
				if(s1.size() == m){
					len1 = s1.size();
					while(len1--){
						t=s1.top();
						s1.pop();
						s2.push(t);
					}
					s1.push(a);
				}
				else if(s1.size() !=m){
					s1.push(a);
				}
			}
		}
		else if(c == 'D'){
			if((s1.size() == 0)&&(s2.size() == 0)){
				cout << "ERROR:Empty" << endl;
			}
			else{
				int len2;
				if(s2.size() == 0){
					len2 = s1.size();
					while(len2--){
						int t = s1.top();
						s1.pop();
						s2.push(t);
					}
					cout << s2.top() << endl;
					s2.pop();
				}
				else if(s2.size() != 0){
					cout << s2.top() << endl;
					s2.pop();
				}
			}
		
		}

	}
	return 0;
}

좋은 웹페이지 즐겨찾기