zoukankan      html  css  js  c++  java
  • [HDOJ5929]Basic Data Structure(双向队列,规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5929

    题意:维护一个栈,支持往栈里塞 0/1 ,弹栈顶,翻转栈,询问从栈底到栈顶按顺序 NAND 的值。

    题解:只要知道最后的 00 后面 11 的个数的奇偶性就行。可以用链表把所有 00 的位置存下来。

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 
      4 typedef long long LL;
      5 
      6 const int maxn = 866666;
      7 int n;
      8 int q[maxn], l, r;
      9 int ll[maxn], rr[maxn];
     10 int zerol, zeror;
     11 char cmd[10];
     12 
     13 int main() {
     14   // freopen("in", "r", stdin);
     15   int T, _ = 1;
     16   scanf("%d", &T);
     17   while(T--) {
     18     scanf("%d", &n);
     19     l = maxn/2 + 1; r = maxn/2;
     20     int x, cur;
     21     zerol = zeror = -1;
     22     int dir = 0, zero = 0;
     23     printf("Case #%d:
    ", _++);
     24     while(n--) {
     25       scanf("%s", cmd);
     26       if(strcmp(cmd, "PUSH")==0) {
     27         scanf("%d", &x);
     28         if(!dir) {
     29           q[--l] = x;
     30           cur = l;
     31         }
     32         else {
     33           q[++r] = x;
     34           cur = r;
     35         }
     36         if(x == 0) {
     37           zero++;
     38           if(zero == 1) {
     39             zerol = zeror = cur;
     40             ll[cur] = rr[cur] = -1;
     41           }
     42           else {
     43             if(!dir) {
     44               ll[zerol] = cur; rr[cur] = zerol;
     45               ll[cur] = -1; zerol = cur;
     46             }
     47             else {
     48               rr[zeror] = cur; ll[cur] = zeror;
     49               rr[cur] = -1; zeror = cur;
     50             }
     51           }
     52         }
     53       }
     54       if(strcmp(cmd, "POP")==0) {
     55         if(!dir) {
     56           x = q[l];
     57           cur = l++;
     58         }
     59         else {
     60           x = q[r];
     61           cur = r--;
     62         }
     63         if(x == 0) {
     64           zero--;
     65           if(zero == 0) zerol = zeror = -1;
     66           else {
     67             if(!dir) {
     68               ll[rr[cur]] = -1;
     69               zerol = rr[cur];
     70             }
     71             else {
     72               rr[ll[cur]] = -1;
     73               zeror = ll[cur];
     74             }
     75           }
     76         }
     77       }
     78       else if(strcmp(cmd, "REVERSE")==0) dir ^= 1;
     79       else if(strcmp(cmd, "QUERY")==0) {
     80         int siz = r - l + 1, one;
     81         if(!siz) printf("Invalid.
    ");
     82         else {
     83           if(!zero) printf("%d
    ", siz%2);
     84           else {
     85             int tmp;
     86             if(!dir) {
     87               one = r - zeror;
     88               tmp = (zeror == l);
     89             }
     90             else {
     91               one = zerol - l;
     92               tmp = (zerol == r);
     93             }
     94             printf("%d
    ", one % 2 == tmp);
     95           }
     96         }
     97       }
     98     }
     99   }
    100   return 0;
    101 }
  • 相关阅读:
    QEMU KVM Libvirt手册(10):Managing Virtual Machines with libvirt
    Openssl的证书操作
    QEMU KVM Libvirt手册(10): KVM的各种限制
    QEMU KVM Libvirt手册(9): network
    nginx调优(一)
    Apache调优(二)
    Apache调优(一)
    使用Varnish为网站加速
    Linux系统调优——系统整体运行状态排查(六)
    Linux系统调优——内核相关参数(五)
  • 原文地址:https://www.cnblogs.com/kirai/p/5935089.html
Copyright © 2011-2022 走看看