CSU 1809: Parenthesis
2017-08-23 14:34
387 查看
Description
Bobo has a balanced parenthesis sequence P=p1 p2…pn oflength n and q questions.
The i-th question is whether P remains balanced after pai and pbi swapped.
Note that questions are individual so that they have no affect on others.
Parenthesis sequence S is balanced if and only if:
1. S is empty;
2. or there exists balanced parenthesis sequence A,B such that S=AB;
3. or there exists balanced parenthesis sequence S' such that S=(S').
Input
The input contains at most 30 sets. For each set:The first line contains two integers n,q (2≤n≤105,1≤q≤105).
The second line contains n characters p1 p2…pn.
The i-th of the last q lines contains 2 integers ai,bi (1≤ai,bi≤n,ai≠bi).
Output
For each question, output "Yes" if P remains balanced, or "No" otherwise.
Sample Input
4 2 (()) 1 3 2 3 2 1 () 1 2
Sample Output
No Yes No
Hint
Source
湖南省第十二届大学生计算机程序设计竞赛代码:
#include<stdio.h> #include<string.h> int main() { int n,m; char str[100010]; int s[100010]; int s1[100010]; while(scanf("%d%d",&n,&m)!=EOF) { int i,j; scanf("%s",str); int len=strlen(str); s[0]=0; s1[0]=0; for(i=0;i<len;i++) { if(str[i]=='(') { s[i+1]=1; s1[i+1]=s1[i]+1; } if(str[i]==')') { s[i+1]=-1; s1[i+1]=s1[i]-1; } } int a,b,t; for(i=0;i<m;i++) { int sum=0; int flag=0; scanf("%d %d",&a,&b); if(a>b) { t=a;a=b;b=t; } if(s[a]==s[b]||(s[a]==-1&&s[b]==1)) { printf("Yes\n"); continue; } sum+=s1[a-1]; for(j=a;j<=b;j++) { if(sum<0) { flag=1; break; } if(j==a||j==b) { if(j==a) sum+=s[b]; else sum+=s[a]; } else sum+=s[j]; } sum+=s[len]-s[b]; if(sum<0) { flag=1; } if(flag) printf("No\n"); else { printf("Yes\n"); } } } return 0; }
相关文章推荐
- CSU 1809 Parenthesis
- CSU 1809 Parenthesis 【前缀和+RMQ】
- CSU 1809 Parenthesis【思维+线段树】好题~
- CSU 1809 Parenthesis(RMQ||线段树)
- [CSU 1809: Parenthesis] 线段树/RMQ处理括号序列
- CSU-1809:Parenthesis 括号匹配问题(线段树维护最小值)
- CSU 1809 Parenthesis
- CSU 1809 Parenthesis (线段树)
- CSU 1809 Parenthesis(RMQ||线段树)
- CSU 1809 Parenthesis(RMQ||线段树)
- CSU 1809 Parenthesis
- CSU Problem 1809 Parenthesis(括号匹配,线段树,前缀和)——湖南省第十二届大学生计算机程序设计竞赛
- CSU 1809 Parenthesis(RMQ||线段树)
- csu 1809 Parenthesis
- CSU 1809 Parenthesis(RMQ||线段树)
- CSU 1809 Parenthesis(线段树前缀和)
- CSU 1809: Parenthesis【前缀和】
- CSU 1809 Parenthesis(RMQ||线段树)
- 2016年湖南省第十二届大学生计算机程序设计竞赛 - G CSU 1809 Parenthesis (线段树)
- CSU 1809 Parenthesis(RMQ||线段树)