• 1494. Monobilliards(栈)


    1494

    之前记得数据结构试卷上有这种题 就是判断某一出栈顺序 是不是满足以1.2。。。n为入栈顺序 

    a1,a2,a3..an;

    对于任意相邻a[i],a[i+1] 如果a[i]>a[i+1]+1 那么它两之间的数肯定已经在前面出栈过了 不然中间的不出栈 a[i+1]不可能出来 

    这一个条件就可以判断了 用数状数组求下和 就行了

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 #define N 100010
     8 #define lowbit(x) x&(-x)
     9 int f[N],a[N],re[N],n;
    10 void add(int x)
    11 {
    12     while(x<=n)
    13     {
    14         re[x] += 1;
    15         x+=lowbit(x);
    16     }
    17 }
    18 int getsum(int x)
    19 {
    20     int s=0;
    21     while(x)
    22     {
    23         s+=re[x];
    24         x-=lowbit(x);
    25     }
    26     return s;
    27 }
    28 int main()
    29 {
    30     int i,k=1;
    31     scanf("%d",&n);
    32     for(i = 1; i <= n ; i++)
    33     {
    34         scanf("%d",&a[i]);
    35     }
    36     add(1);
    37     for(i = 1; i < n ; i++)
    38     {
    39         add(a[i]);
    40         if(a[i]>a[i+1]+1)
    41         {
    42             int x = getsum(a[i])-getsum(a[i+1]);
    43             if(x!=a[i]-a[i+1])
    44             {
    45                 k = 0;
    46                 break;
    47             }
    48         }
    49     }
    50     if(k)
    51     puts("Not a proof");
    52     else
    53     puts("Cheater");
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    设计模式六大原则
    .net Stream篇(七)
    .net Stream篇(六)
    .net Stream篇(五)
    .net Stream篇(四)
    Leetcode 18
    Leetcode 16
    Leetcode 15
    Leetcode 12
    Leetcode 9
  • 原文地址:https://www.cnblogs.com/shangyu/p/3338293.html
Copyright © 2020-2023  润新知