zoukankan      html  css  js  c++  java
  • 猜猜数据结构D301

    猜猜数据结构D301
    难度级别:C;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述

    你有一个类似“包包”的数据结构,支持两种操作,如下表所示。 1x:把元素x放进包包 2:从包包中拿出一个元素 给出一系列操作以及返回值,你的任务是猜猜这个“包包”到底是什么。它可能是一个栈<后进先出),队列(先进先出),优先队列(数值大的整数先出)或者其他什么奇怪的东西。 

    输入
    第一行为一个整数n(1≤n≤1 000)。以下n行每行要么是一条类型1的命令,要么是一条类型2的命令后面跟着一个整数x(1≤x≤100)。这个整数x表示执行完这条类型2的命令后,包包无错地返回了x。输入文件大小不超过1MB。
    输出
    输出一行。一共有5种可能的输出。 stack:一定是一个栈 queue:一定是一个队列 priority queue:一定是一个优先队列 impossible:一定不是以上三种 not sure:至少有两种是可能的 
    输入示例
    5 1 5 1 3 1 2 2 2 2 3
    输出示例
    stack
    其他说明
    数据说明:数据那肯定非常大,建议用printf和scanf哦。
     

     就是建三个数据结构,一个队列一个栈一个优先队列,然后分别模拟,哪个不行就把哪个去掉。

    刚开始好几次都是运行时错误,注意如果数据结构没有判空也会导致运行时错误,不一定是数组开小了的问题。

     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #include <queue>
     8 #include <stack>
     9 using namespace std;
    10 bool owo[5];
    11 int main()
    12 {
    13     queue <long long> q;
    14     stack <long long> s;
    15     priority_queue <long long> Q;
    16     int n;
    17     scanf("%d",&n);
    18     memset(owo,1,sizeof(owo));
    19     int ans=3;
    20     for(int i=1;i<=n;i++)
    21     {
    22         int a;
    23         long long b;
    24         scanf("%d%lld",&a,&b);
    25         if(a==1)
    26         {
    27             if(owo[1]) q.push(b);
    28             if(owo[2]) s.push(b);
    29             if(owo[3]) Q.push(b);
    30         }
    31         else
    32         {
    33             if(owo[1])
    34                 if(!q.empty()) if(q.front()==b)q.pop();else {owo[1]=0;ans--;}
    35                 else {owo[1]=0;ans--;}
    36             if(owo[2])
    37                 if(!s.empty()) if(s.top()==b)s.pop();else {owo[2]=0;ans--;}
    38                 else {owo[2]=0;ans--;}
    39             if(owo[3])
    40                 if(!Q.empty()) if(Q.top()==b)Q.pop();else {owo[3]=0;ans--;}
    41                 else {owo[3]=0;ans--;}
    42         }
    43     }
    44     if(ans==0) printf("impossible");
    45     else if(ans>1) printf("not sure");
    46     else
    47     {
    48             if(owo[1]) printf("queue");
    49             else if(owo[2]) printf("stack");
    50             else printf("priority queue");
    51     }
    52     system("pause");
    53     return 0;
    54 } 
    :)

    代码太复杂了。。

  • 相关阅读:
    openwrt编译出错处理记录
    转:小白编译openwrt固件教程
    转:openwrt中luci学习笔记
    (转)内存和外设的统一编址及独立编址
    (转)无法打开C盘,提示"本次操作由于这台计算机的限制被取消,请与你的管理员联系”
    (转)c# 解析JSON的几种办法
    计算机中断(转贴,很经典的解释)
    转:用WCAT进行IIS压力测试
    转:windows命令行下如何查看磁盘空间大小
    转:如何在32位程序中突破地址空间4G的限制
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/7686291.html
Copyright © 2011-2022 走看看