• 10.1牛客J题


    https://www.nowcoder.com/acm/contest/201/J

    Description:
      给你一行括号,定义了括号合格的形式,然后Q次询问,问你这个区间内括号是否合格

    Solution:
      利用栈模拟,栈内记录括号的编号,如果新来的括号可以匹配栈顶元素的括号,那么就弹出,否则入栈,用一个数组L记录每个括号

    完成匹配后对应的括号编号(所以括号编号是唯一的)

    最后对于询问l,r,这个区间里数的个数必须要是偶数,然后,L[R] == L[l-1]才可以,这个表示该区间前面的能消的消去后所对应的第一个id,等于该区间最右边能消的消去后对应的id,id唯一所以这个区间一定可以消完~,而且不会用到区间外的括号,如果用到区间外的括号就不会等于L[l-1]啦

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn = 1e6 + 1e2;
    int A[maxn];
    int stk[maxn],stkid;
    int l[maxn];
    int main()
    {
        int n,m,q;
        while(~scanf("%d%d%d",&n,&m,&q))
        {
            stkid = 0;
            int op;
            for(int i = 1;i <= n;++i)
            {
                scanf("%d",&A[i]);
            }
            for(int i = 1;i <= n;++i)
            {
                if(!stkid)
                {
                    stk[++stkid] = i;
                }
                else
                {
                    op = A[i];
                    int op2 = A[stk[stkid]];
                    if(op / 2 == op2 / 2 && op2 + 1 == op)
                    {
                        stkid--;
                    }
                    else
                    {
                        stk[++stkid] = i;
                    }
                }
                l[i] = stk[stkid];
            }
            int L,R;
            l[0] = 0;
            for(int i = 1;i <= q;++i)
            {
                scanf("%d%d",&L,&R);
                if((R-L) % 2 == 1)
                {
                    if(l[L-1] == l[R])
                        printf("Yes
    ");
                    else
                        printf("No
    ");
                }
                else
                    printf("No
    ");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    iPhone X 适配手机端 H5 页面通用解决方案
    创建cordova项目
    UltraEdit mac破解版
    ionic 和cordova的区别是什么
    还在为AndroidStudio的Gradle版本配置头疼?看看老司机的解决方法吧
    java final
    死锁产生的条件+排除死锁的方法
    String str=new String("a")和String str = "a"有什么区别?
    重载和覆盖的区别?(overload vs override)
    深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/9740663.html
Copyright © 2020-2023  润新知