• uva 11995 I Can Guess the Data Structure!


    https://vjudge.net/problem/UVA-11995

    题意:

    现在有一个未知的数据结构,给出n个操作,如果说操作为1的话,给出一个x放入这个结构,如果说操作为2的话,表示从里面拿出来了一个数x。

    现在问是否有一种数据结构符合这组数据的操作,给定的数据结构有栈,队列,优先队列。

    思路:

    由于有了现成的stl,那么直接模拟算算是否符合就行了,注意容器要判断容器是否为空。

    代码:

      1 #include <stdio.h>
      2 #include <stack>
      3 #include <queue>
      4 using namespace std;
      5 
      6 stack<int> s;
      7 queue<int> q;
      8 priority_queue<int> pq;
      9 
     10 struct node
     11 {
     12     int op;
     13     int x;
     14 } a[1005];
     15 
     16 int main()
     17 {
     18     int n;
     19 
     20     while (scanf("%d",&n) != EOF)
     21     {
     22         while (!s.empty()) s.pop();
     23         while (!q.empty()) q.pop();
     24         while (!pq.empty()) pq.pop();
     25 
     26         for (int i = 0;i < n;i++)
     27         {
     28             scanf("%d%d",&a[i].op,&a[i].x);
     29         }
     30 
     31         bool f = 0,ff = 0,fff = 0;
     32 
     33         for (int i = 0;i < n;i++)
     34         {
     35             if (a[i].op == 1)
     36             {
     37                 s.push(a[i].x);
     38             }
     39             else
     40             {
     41                 int tmp;
     42 
     43                 if (s.empty())
     44                 {
     45                     f = 1;break;
     46                 }
     47                 else if (!s.empty()) tmp = s.top(),s.pop();
     48 
     49                 if (tmp != a[i].x)
     50                 {
     51                     f = 1;break;
     52                 }
     53             }
     54         }
     55 
     56         for (int i = 0;i < n;i++)
     57         {
     58             if (a[i].op == 1)
     59             {
     60                 q.push(a[i].x);
     61             }
     62             else
     63             {
     64                 if (q.empty())
     65                 {
     66                     ff = 1;break;
     67                 }
     68                 else if (!q.empty())
     69                 {
     70                     int tmp = q.front();q.pop();
     71 
     72                     if (tmp != a[i].x)
     73                     {
     74                         ff = 1;break;
     75                     }
     76                 }
     77             }
     78         }
     79 
     80         for (int i = 0;i < n;i++)
     81         {
     82             if (a[i].op == 1) pq.push(a[i].x);
     83             else
     84             {
     85                 if (pq.empty())
     86                 {
     87                     fff = 1;break;
     88                 }
     89                 else if (!pq.empty())
     90                 {
     91                     int tmp = pq.top();pq.pop();
     92 
     93                     if (tmp != a[i].x)
     94                     {
     95                         fff = 1;break;
     96                     }
     97                 }
     98             }
     99         }
    100 
    101         int cnt = 0;
    102 
    103         if (f) cnt++;
    104         if (ff) cnt++;
    105         if (fff) cnt++;
    106 
    107         if (cnt == 3) printf("impossible
    ");
    108         else if (cnt <= 1) printf("not sure
    ");
    109         else
    110         {
    111             if (!f) printf("stack
    ");
    112             if (!ff) printf("queue
    ");
    113             if (!fff) printf("priority queue
    ");
    114         }
    115     }
    116 
    117 
    118 
    119     return 0;
    120 }
  • 相关阅读:
    Thread
    C# Iterations: IEnumerator, IEnumerable and Yield
    基于SharePoint 2010 创建一个简单的工作流
    利用with关键字实现数据查询的递归调用
    编写JQuery插件示例
    生成密码web小工具
    (转)关于SQL Server 中合并行的方法
    html5做的割绳子游戏
    SharePoint Foundation和SharePoint Server的区别
    如何实现基于AD的MOSS的FORM认证方式
  • 原文地址:https://www.cnblogs.com/kickit/p/7635938.html
Copyright © 2020-2023  润新知