Friday, April 24, 2015

UVa 11995 - I Can Guess the Data Structure!

// UVa 11995 - I Can Guess the Data Structure!

#include <stdio.h>
#include <stack>
#include <queue>
using namespace std;

queue<int> q;
priority_queue<int> pq;
stack<int> s;

int main() {
	int n;
	while (scanf("%d", &n) > 0) {

		q = queue<int>();
		pq = priority_queue<int>();
		s = stack<int>();
		bool canBeQ = true, canBeP = true, canBeS = true;
		int count = 0;

		for (; n; n--) {
			int operation, parameter;
			scanf("%d %d", &operation, &parameter);
			if (operation == 1) {
				q.push(parameter);
				pq.push(parameter);
				s.push(parameter);
				count++;
			} else {
				if (count > 0) {
					int out = q.front();
					q.pop();
					canBeQ = canBeQ && (out == parameter);

					out = pq.top();
					pq.pop();
					canBeP = canBeP && (out == parameter);

					out = s.top();
					s.pop();
					canBeS = canBeS && (out == parameter);

					count--;
				} else {
					canBeQ = false;
					canBeP = false;
					canBeS = false;
				}
			}
		}

		if (canBeQ && !canBeP && !canBeS)
			printf("queue\n");
		else if (!canBeQ && canBeP && !canBeS)
			printf("priority queue\n");
		else if (!canBeQ && !canBeP && canBeS)
			printf("stack\n");
		else if (!canBeQ && !canBeP && !canBeS)
			printf("impossible\n");
		else
			printf("not sure\n");
	}

	return 0;
}

No comments:

Post a Comment