Comet OJ 热身赛(K题)principal(括号匹配问题+stack模拟)
已经提交 已经通过
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(1≤n,m,q≤106)。
第二行有nn个空格隔开的整数xx,第i个整数x_i(0 \le x_i < m*2)xi(0≤xi<m∗2)代表文档中的第ii个字符是第\lfloor \frac{x}{2} \rfloor⌊2x⌋种括号。另外,如果x_ixi是偶数,它代表一个左括号,否则它代表一个右括号。
接下来qq行,每行两个空格隔开的整数l,r(1 \le l \le r \le n)l,r(1≤l≤r≤n),代表询问第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=;
int a[maxn],q[maxn],L[maxn],top,N,M,Q;
int main(){
scanf("%d%d%d",&N,&M,&Q);
rep(i,,N) scanf("%d",&a[i]);
rep(i,,N) {
if(!top) q[++top]=i;
else {
if(a[i]/==a[q[top]]/&&a[i]==a[q[top]]+) top--;
else q[++top]=i;
}
L[i]=q[top];
}
rep(i,,Q){
int x,y;
scanf("%d%d",&x,&y);
if((y-x)&){
if(L[y]==L[x-]) puts("Yes");
else puts("No");
}
else puts("No");
}
return ;
}
Comet OJ 热身赛(K题)principal(括号匹配问题+stack模拟)的更多相关文章
- 【九度OJ】题目1153:括号匹配问题 解题报告
[九度OJ]题目1153:括号匹配问题 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1153 题目描述: 在某个字符串(长度不超过1 ...
- Comet OJ 热身赛-principal
这题的话,我们分析一下,入栈的操作是: 栈空 栈顶元素和当前操作元素不属于同一类括号 栈顶元素和当前操作元素属于同一类括号,但是并不是左括号在前,右括号在后 上面三个条件有任意一个满足都应该入栈,如果 ...
- Comet OJ 热身赛(E题)(处理+最短路算法)
dijkstra 已经提交 已经通过 42.86% Total Submission:189 Total Accepted:81 题目描述 Eagle Jump公司正在开发一款新的游戏.泷本一二三作为 ...
- 区间dp好题cf149d 括号匹配
见题解链接https://blog.csdn.net/sdjzping/article/details/19160013 #include<bits/stdc++.h> using nam ...
- isaster(Comet OJ - Contest #11D题+kruskal重构树+线段树+倍增)
目录 题目链接 思路 代码 题目链接 传送门 思路 \(kruskal\)重构树\(+\)线段树\(+\)倍增 代码 #include <set> #include <map> ...
- 表达式括号匹配(stack)
题目描述 假设一个表达式由英文字母(小写).运算符(+.-.*./)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右括号是否匹配,若匹配,则返回“YES”:否则返回 ...
- POJ-2955 Brackets(括号匹配问题)
题目链接:http://poj.org/problem?id=2955 这题要求求出一段括号序列的最大括号匹配数量 规则如下: the empty sequence is a regular brac ...
- 南阳理工大学oj 题目15 括号匹配(二)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[&qu ...
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
随机推荐
- Sql Server 按格式输出日期
SELECT dbo.fn_Data(getdate(),'yyyymmdd') CREATE FUNCTION [dbo].[fn_Data] (@date as datetime, @format ...
- SMM框架--maven创建web项目
1.首先新建一个maven项目,看图: 2.按照以上步骤就可以创建一个maven项目,可以看到最下图的目录结构,但是这样的目录结构是不对的,需要做一些修改. 首先为了避免乱码,我们应该将项目编码换成U ...
- c/c++ 标准库 map set 删除
标准库 map set 删除 删除操作 有map如下: map<int, size_t> cnt{{2,22}, {3,33}, {1,11}, {4,44}; 删除方法: 删除操作种类 ...
- JAVA的三个版本EE,SE,ME
1998年 SUN发布三个不同版本JAVA,分别是: Java J2EE(Java Platform,Enterprise Edition) JAVA企业版,应用为开发和部署可移植.健壮.可伸缩且安全 ...
- 创建属于其他Session的进程
创建其他Session(User)的进程需要拿到对应Session的Token作为CreateProcessAsUser的参数来启动进程. 修改有System权限的Token的TokenId为其他Se ...
- es6的正则扩展笔记之修饰符
es6对于正则表达式添加了 u 修饰符和 y 修饰符. u 修饰符:含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符. 该修饰符不光会正确处理正则表达式,还会正确处 ...
- win32gui.Findwindow(parm1,parm2)查找窗口的句柄方法
介绍之前先让大家了解一下win32gui的模块用法 和 获取窗口类名工具 使用Python时,有时也会要操作到系统窗口的一些东西,下面就介绍win32gui.Findwindow(param1,par ...
- RPC入门总结(一)RPC定义和原理
转载:深入浅出 RPC - 浅出篇 转载:RPC框架与Dubbo完整使用 转载:深入浅出 RPC - 深入篇 转载:远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场 ...
- C#、Java中的一些小知识点总结(持续更新......)
前言:在项目中,有时候一些小的知识,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小知识点,以备用,并持续更新...... 1.禁用DataGridV ...
- Interrupt
Interrupt ,给线程发送一个中断信号 给t1线程发送了中断信号,t1对线程的中断信号判断后,跳出循环,线程t1运行结束 public class Demo { public static vo ...