码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 11995 猜猜数据结构

时间:2018-08-19 21:57:40      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:代码   turn   push   结构   name   front   uva   std   can   

代码来自蓝书第三章第一题,思路很清晰。主要实现过程中需要区分以下数据结构:
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\n");
        else if(s && !q && !pq) printf("stack\n");
        else if(!s && q && !pq) printf("queue\n");
        else if(!s && !q && pq) printf("priority queue\n");
        else printf("not sure\n");
    }
    return 0;
}

UVa 11995 猜猜数据结构

标签:代码   turn   push   结构   name   front   uva   std   can   

原文地址:https://www.cnblogs.com/ronnielee/p/9502561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!