E. Correct Bracket Sequence Editor

题目连接:

http://www.codeforces.com/contest/670/problem/E

Description

Recently Polycarp started to develop a text editor that works only with correct bracket sequences (abbreviated as CBS).

Note that a bracket sequence is correct if it is possible to get a correct mathematical expression by adding "+"-s and "1"-s to it. For example, sequences "(())()", "()" and "(()(()))" are correct, while ")(", "(()" and "(()))(" are not. Each bracket in CBS has a pair. For example, in "(()(()))":

1st bracket is paired with 8th,

2d bracket is paired with 3d,

3d bracket is paired with 2d,

4th bracket is paired with 7th,

5th bracket is paired with 6th,

6th bracket is paired with 5th,

7th bracket is paired with 4th,

8th bracket is paired with 1st.

Polycarp's editor currently supports only three operations during the use of CBS. The cursor in the editor takes the whole position of one of the brackets (not the position between the brackets!). There are three operations being supported:

«L» — move the cursor one position to the left,

«R» — move the cursor one position to the right,

«D» — delete the bracket in which the cursor is located, delete the bracket it's paired to and all brackets between them (that is, delete a substring between the bracket in which the cursor is located and the one it's paired to).

After the operation "D" the cursor moves to the nearest bracket to the right (of course, among the non-deleted). If there is no such bracket (that is, the suffix of the CBS was deleted), then the cursor moves to the nearest bracket to the left (of course, among the non-deleted).

There are pictures illustrated several usages of operation "D" below.

All incorrect operations (shift cursor over the end of CBS, delete the whole CBS, etc.) are not supported by Polycarp's editor.

Polycarp is very proud of his development, can you implement the functionality of his editor?

Input

The first line contains three positive integers n, m and p (2 ≤ n ≤ 500 000, 1 ≤ m ≤ 500 000, 1 ≤ p ≤ n) — the number of brackets in the correct bracket sequence, the number of operations and the initial position of cursor. Positions in the sequence are numbered from left to right, starting from one. It is guaranteed that n is even.

It is followed by the string of n characters "(" and ")" forming the correct bracket sequence.

Then follow a string of m characters "L", "R" and "D" — a sequence of the operations. Operations are carried out one by one from the first to the last. It is guaranteed that the given operations never move the cursor outside the bracket sequence, as well as the fact that after all operations a bracket sequence will be non-empty.

Output

Print the correct bracket sequence, obtained as a result of applying all operations to the initial sequence.

Sample Input

8 4 5

(())()()

RDLD

Sample Output

()

题意

你有长度为n的括号序列,有m个操作,光标现在在pos位置

操作有3个

d,l,r

删除,左移动,右移动。

删除就是,你每次可以删除光标所在的位置以及他所对应的括号,和这括号内包括的东西

然后这个光标就跑到这个地方的右边去了

问你操作完之后是什么样子了?

题解:

对应的括号,这个用栈去找就好了

然后操作,我们就模拟一下链表就好了

然后就完了……

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+7;
struct node{int l,r;}p[maxn];
int n,m,pos,a[maxn],d[maxn],len,now=0;
char s1[maxn],s2[maxn];
int main()
{
scanf("%d%d%d",&n,&m,&pos);
scanf("%s",s1+1);len=strlen(s1+1);
for(int i=0;i<=n+1;i++)p[i].l=i-1,p[i].r=i+1;
for(int i=1;i<=len;i++)
{
if(s1[i]=='(')a[now++]=i;
else d[i]=a[--now],d[a[now]]=i;
}
scanf("%s",s2+1);
for(int i=1;i<=m;i++)
{
if(s2[i]=='R')pos=p[pos].r;
else if(s2[i]=='L')pos=p[pos].l;
else
{
int l=min(d[pos],pos);
int r=max(d[pos],pos);
p[p[l].l].r=p[r].r;
p[p[r].r].l=p[l].l;
pos=p[r].r;
if(pos==n+1)pos=p[n+1].l;
if(pos==0)pos=p[0].r;
}
}
int pos=p[0].r;
while(pos!=n+1)
{
cout<<s1[pos];
pos=p[pos].r;
}
cout<<endl;
return 0;
}

Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 栈 链表的更多相关文章

  1. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 线段树模拟

    E. Correct Bracket Sequence Editor   Recently Polycarp started to develop a text editor that works o ...

  2. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 模拟

    题目链接: http://codeforces.com/contest/670/problem/E 题解: 用STL的list和stack模拟的,没想到跑的还挺快. 代码: #include<i ...

  3. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor (链表)

    题目链接:http://codeforces.com/contest/670/problem/E 给你n长度的括号字符,m个操作,光标初始位置是p,'D'操作表示删除当前光标所在的字符对应的括号字符以 ...

  4. CodeForces 670E Correct Bracket Sequence Editor(list和迭代器函数模拟)

    E. Correct Bracket Sequence Editor time limit per test 2 seconds memory limit per test 256 megabytes ...

  5. 【31.93%】【codeforces 670E】Correct Bracket Sequence Editor

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. cf670E Correct Bracket Sequence Editor

    Recently Polycarp started to develop a text editor that works only with correct bracket sequences (a ...

  7. Codeforces Round #350 (Div. 2) F. Restore a Number 模拟构造题

    F. Restore a Number   Vasya decided to pass a very large integer n to Kate. First, he wrote that num ...

  8. Codeforces Round #350 (Div. 2) D2. Magic Powder - 2

    题目链接: http://codeforces.com/contest/670/problem/D2 题解: 二分答案. #include<iostream> #include<cs ...

  9. Codeforces Round #350 (Div. 2)解题报告

    codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...

随机推荐

  1. Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等

    http://blog.csdn.net/h7870181/article/details/8653865 以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后 ...

  2. 决策树和adaboost

    前面:好老的东西啊,啊啊啊啊啊啊啊啊啊 来源于统计学习方法: 信息增益: 其中 信息增益率: 基尼指数: 取gini最小的 先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造. 后 ...

  3. RNN BPTT

    双向LSTM

  4. MyEclipse开发工具,当选中一个单词时,其他相同的单词会被高亮显示(选中/标记)

    1.步骤: Window-->Preferences-->Java-->Editor-->Mark Occurremces下的 Mark Occurremces of the ...

  5. python基础学习之路No.1

    版本python2 python语言不分"和',两者可以一样使用,同等效果 1.输出print python3中print是一个函数 print "hello world" ...

  6. tomcat 内存参数优化示例

    https://www.cnblogs.com/cornerxin/p/9304100.html

  7. centos killall安装

    https://blog.csdn.net/joeyon1985/article/details/46707865 https://blog.csdn.net/xupeng874395012/arti ...

  8. jquery跨域请求事例

    //js发送跨域请求部分var requesturl = 'url'; $.ajax({ type:'GET', url:requesturl, data:{'qNum':num}, dataType ...

  9. JavaScript event loop事件循环 macrotask与microtask

    macrotask  姑且称为宏任务,在很多上下文也被简称为task.例如: setTimeout, setInterval, setImmediate, I/O, UI rendering. mic ...

  10. 基于范围的for循环

    语法: for ( for-range-declaration : expression ) statement 注意一般用auto表达类型.不需要修改时常用引用类型 例子: // range-bas ...