zoukankan      html  css  js  c++  java
  • Princess Principal(思维题)

    Princess Principal

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

    题目描述

    阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍。在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没有语法错误,这有助于她们鉴别写文档的人受教育程度。
    这次用于训练的是一个含有n个括号的文档。括号一共有m种,每种括号都有左括号和右括号两种形式。我们定义用如下的方式定义一个合法的文档:
    1.一个空的字符串是一个合法的文档。
    2.如果A,B都是合法的文档,那么AB也是合法的文档。
    3.如果S是合法的文档,那么aSb也是合法的文档,其中a,b是同一种括号,并且a是左括号,b是右括号。
    现在给出q个询问,每次询问只考虑文档第l至r个字符的情况下,文档是不是合法的。

    输入描述:

    第一行两个整数n,m,q(1 ≤ n,m,q ≤ 10
    6
    )。第二行有n个空格隔开的整数x,第i个整数x
    i
    (0 ≤ x
    i
     < m*2)代表文档中的第i个字符是第
    种括号。另外,如果x
    i
    是偶数,它代表一个左括号,否则它代表一个右括号。
    接下来q行,每行两个空格隔开的整数l,r(1 ≤ l ≤ r ≤ n),代表询问第l至r个字符构成的字符串是否是一个合法的文档。

    输出描述:

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

    输入

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

    输出

    Yes
    No
    No


    个人感觉思路很神奇,可能是因为我太菜了。。。
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<stack>
     6 using namespace std;
     7 
     8 int a[1000005];
     9 int ans[1000005];
    10 
    11 int main(){
    12     std::ios::sync_with_stdio(false);
    13     int n,m,q;
    14     stack<int>st;
    15     cin>>n>>m>>q;
    16     for(int i=1;i<=n;i++){
    17         cin>>a[i];
    18     }
    19     for(int i=1;i<=n;i++){
    20         if(st.empty()){
    21             st.push(i);
    22         }
    23         else if((a[st.top()]/2!=a[i]/2)||(a[st.top()]+1!=a[i])){
    24             st.push(i);
    25         }
    26         else{
    27             st.pop();
    28         }
    29         if(st.empty()){
    30             ans[i]=0;
    31         }
    32         else{
    33             ans[i]=st.top();
    34         }
    35     }
    36     int x,y;
    37     while(q--){
    38         cin>>x>>y;
    39         if((y-x)&1){
    40             if(ans[y]==ans[x-1]){
    41                 puts("Yes");
    42             }
    43             else{
    44                 puts("No");
    45             }
    46         }
    47         else{
    48             puts("No");
    49         }
    50     }
    51 }
    View Code
     
  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/Fighting-sh/p/9735679.html
Copyright © 2011-2022 走看看