zoukankan      html  css  js  c++  java
  • HDU-5818-Joint Stacks

    题解:

    用优先队列和pair来模拟栈,这个很好想。关键点是开第三个栈,因为可能有多次A栈和B栈的合并,如果转移次数多了会超时。这时候就用到第三个栈了,把所以合并都合并到C栈里去。取的时候,先从A/B栈里取。如果是空栈,就从C栈里取;

    • 思维题+优先队列+栈
      Accepted 5818 858MS 2112K 1183 B G++
      #include "cstdio"
      #include "queue"
      using namespace std;
      typedef pair<int, int> PII;
      priority_queue<PII> a, b, c;
      char op[10], ch;
      int main() {
          int n, k, ca = 1;
          while (scanf("%d", &n) && n) {
              printf("Case #%d:
      ", ca++);
              for (int i = 1; i <= n; i++) {
                  scanf("%s", op);
                  if (op[1] == 'u') {
                      scanf(" %c%d", &ch, &k);
                      if (ch == 'A') {
                          a.push(make_pair(i, k));
                      } else {
                          b.push(make_pair(i, k));
                      }
                  } else if (op[1] == 'o') {
                      scanf(" %c", &ch);
                      if (ch == 'A') {
                          if (a.empty()) {
                              printf("%d
      ", c.top().second);
                              c.pop();
                          } else {
                              printf("%d
      ", a.top().second);
                              a.pop();
                          }
                      } else {
                          if (b.empty()) {
                              printf("%d
      ", c.top().second);
                              c.pop();
                          } else {
                              printf("%d
      ", b.top().second);
                              b.pop();
                          }
                      }
                  } else {
                      gets(op);
                      while (!a.empty()) {
                          c.push(a.top());
                          a.pop();
                      }
                      while (!b.empty()) {
                          c.push(b.top());
                          b.pop();
                      }
                  }
              }
              while (!a.empty()) {
                  a.pop();
              }
              while (!b.empty()) {
                  b.pop();
              }
              while (!c.empty()) {
                  c.pop();
              }
          }
          return 0;
      }
  • 相关阅读:
    Mysql 存储引擎中InnoDB与Myisam的主要区别
    [转]memmove函数
    _Obj* __STL_VOLATILE* __my_free_list
    [转]STL的内存分配器
    [转载]C++ 堆与栈简单的介绍
    [转载]__type_traits
    [转载]C++中 引用&与取地址&的区别
    [转载]delete指针之后应该赋值NULL
    [转载]C++中声明与定义的区别
    学习笔记ubuntu/shell
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10548545.html
Copyright © 2011-2022 走看看