zoukankan      html  css  js  c++  java
  • HDU 6188 Duizi and Shunzi

    栈。

    将数字排序后,一个一个压入栈。如果栈顶两个元素形成了对子,那么$ans+1$,弹出栈顶两个元素;如果栈顶三个元素形成了顺子,那么$ans+1$,弹出栈顶三个元素。

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1000000 + 10;
    int n;
    int a[maxn];
    int b[maxn];
    int c[maxn];
    
    int main() {
      while(~scanf("%d", &n)) {
        memset(a, 0, sizeof a);
        for(int i = 1; i <= n; i ++) {
          int x;
          scanf("%d", &x);
          a[x] ++;
        }
        int ans = 0;
        int num = 0;
        int top = -1;
        for(int i = 1; i <= n; i ++) {
          while(a[i] --) {
            c[++ num] = i;
          }
        }
        for(int i = 1; i <= n; i ++) {
          if(top == -1) {
            top ++;
            b[top] = c[i];
          } else {
            if(c[i] == b[top]) {
              top --;
              ans ++;
            } else {
              if(top < 1) {
                top ++;
                b[top] = c[i];
              } else {
                if(b[top - 1] + 1 == b[top] && b[top] + 1 == c[i]) {
                  top --;
                  top --;
                  ans ++;
                } else {
                  top ++;
                  b[top] = c[i];
                }
              }
            }
          }
        }
        printf("%d
    ", ans);
      }
      return 0;
    }
    

      

  • 相关阅读:
    linux系统缓存机制
    信号“未决”与“阻塞”
    异步I/O
    Unix下五种IO模型
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
  • 原文地址:https://www.cnblogs.com/zufezzt/p/7492821.html
Copyright © 2011-2022 走看看