• Comet OJ 热身赛(K题)principal(括号匹配问题+stack模拟)


    principal

     

    23.66%

    Total Submission:131

    Total Accepted:31

    题目描述

     

    阿尔比恩王国潜伏着代号白鸽队''的一群间谍。在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没有语法错误,这有助于她们鉴别写文档的人受教育程度。

    这次用于训练的是一个含有nn个括号的文档。括号一共有mm种,每种括号都有左括号和右括号两种形式。我们定义用如下的方式定义一个合法的文档:

    1.一个空的字符串是一个合法的文档。

    2.如果A,B都是合法的文档,那么AB也是合法的文档。

    3.如果S是合法的文档,那么aSb也是合法的文档,其中a,b是同一种括号,并且a是左括号,b是右括号。

    现在给出qq个询问,每次询问只考虑文档第ll至rr个字符的情况下,文档是不是合法的。

     
     

    输入描述

     

    第一行两个整数n,m,q(1 le n,m,q le 10^6)n,m,q(1n,m,q106)。

    第二行有nn个空格隔开的整数xx,第i个整数x_i(0 le x_i &lt; m*2)xi(0xi<m2)代表文档中的第ii个字符是第lfloor frac{x}{2} floor2x⌋种括号。另外,如果x_ixi是偶数,它代表一个左括号,否则它代表一个右括号。

    接下来qq行,每行两个空格隔开的整数l,r(1 le l le r le n)l,r(1lrn),代表询问第ll至rr个字符构成的字符串是否是一个合法的文档。

    输出描述

     

    输出共qq行,如果询问的字符串是一个合法的文档,输出Yes,否则输出No

    样例输入 1 

    6 4 3
    0 2 3 1 4 7
    1 4
    1 5
    5 6

    样例输出

    Ye

    No

    No

    题意:
    思路:既然L-R是一个合法的文档,那么即L~R这个子文档的括号都是合法匹配的,那么我们可以对整个文档进行预处理,
    处理出到第i个位置有多少个括号没匹配成功。记array: L 那么如果第L[l-1]的值等于L[r]即可以说明l~r是一个合法文档
    因为L[l-1]==L[r] ,那么即代表l~r这段中都自我抵消掉了(即匹配完成了)。
    细节见代码:
    #include<bits/stdc++.h> 
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    const int maxn=1000010;
    int a[maxn],q[maxn],L[maxn],top,N,M,Q;
    int main(){
        scanf("%d%d%d",&N,&M,&Q);
        rep(i,1,N) scanf("%d",&a[i]);
        rep(i,1,N) {
            if(!top) q[++top]=i;
            else {
                if(a[i]/2==a[q[top]]/2&&a[i]==a[q[top]]+1) top--;
                else q[++top]=i;
            }
            L[i]=q[top];
        }
        rep(i,1,Q){
            int x,y;
            scanf("%d%d",&x,&y);
            if((y-x)&1){
                if(L[y]==L[x-1]) puts("Yes");
                else puts("No");
            }
            else puts("No");
        }
        return 0;
    }
    
    
    
     
    本博客为本人原创,如需转载,请必须声明博客的源地址。 本人博客地址为:www.cnblogs.com/qieqiemin/ 希望所写的文章对您有帮助。
  • 相关阅读:
    PHP设计模式——迭代模式
    采用navicat导出表结构及数据insert声明
    [Angular] Protect The Session Id with https and http only
    [D3] Creating a D3 Force Layout in React
    [D3] Animate Chart Axis Transitions in D3 v4
    [D3] Animate with the General Update Pattern in D3 v4
    [Web Security] JSON Hijacking
    [Angular] Progress HTTP Events with 'HttpRequest'
    [RxJS] How To get the results of two HTTP requests made in sequence
    [RxJS] Avoid mulit post requests by using shareReplay()
  • 原文地址:https://www.cnblogs.com/qieqiemin/p/10290308.html
Copyright © 2020-2023  润新知