UVa 11995 猜猜数据结构

Posted ronnielee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 11995 猜猜数据结构相关的知识,希望对你有一定的参考价值。

代码来自蓝书第三章第一题,思路很清晰。主要实现过程中需要区分以下数据结构:
stack
queue
priority_queue

#include<cstdio>
#include<queue>
#include<stack>
#include<cstdlib>
using namespace std;

const int maxn = 1000 + 10;
int n, t[maxn], v[maxn];

int check_stack() 
{
    stack<int> s;
    for(int i = 0; i < n; i++) 
    {
        if(t[i] == 2) 
        {
            if(s.empty()) return 0;
            int x = s.top(); s.pop();
            if(x != v[i]) return 0;
        }
        else s.push(v[i]);
    }
    return 1;
}

int check_queue() 
{
    queue<int> s;
    for(int i = 0; i < n; i++) 
    {
        if(t[i] == 2) 
        {
            if(s.empty()) return 0;
            int x = s.front(); s.pop();
            if(x != v[i]) return 0;
        }
        else s.push(v[i]);
    }
    return 1;
}

int check_pq() 
{
    priority_queue<int> s;
    for(int i = 0; i < n; i++) 
    {
        if(t[i] == 2) 
        {
            if(s.empty()) return 0;
            int x = s.top(); s.pop();
            if(x != v[i]) return 0;
        }
        else s.push(v[i]);
    }
    return 1;
}

int main() 
{
    while(scanf("%d", &n) == 1) 
    {
        for(int i = 0; i < n; i++) 
            scanf("%d%d", &t[i], &v[i]);
        int s = check_stack();
        int q = check_queue();
        int pq = check_pq();
        if(!s && !q && !pq) printf("impossible
");
        else if(s && !q && !pq) printf("stack
");
        else if(!s && q && !pq) printf("queue
");
        else if(!s && !q && pq) printf("priority queue
");
        else printf("not sure
");
    }
    return 0;
}

以上是关于UVa 11995 猜猜数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Uva 11995 I Can Guess the Data Structure!

UVa 11995 - I Can Guess the Data Structure!

UVA11995 I Can Guess the Data Structure!

c_cpp uva11995

UVA - 11995 模拟

UVA 11995 (STL_E题)解题报告