> 文档中心 > Bracket Sequence Deletion Edu125C(思维 前缀)

Bracket Sequence Deletion Edu125C(思维 前缀)

链接:Problem - C - Codeforces

题意:

给你一个括号序列,问删掉回文前缀以及括号对需要的操作数和剩余长度。

题解

另一天起来补题,刚开始看以为要栈模拟和回文串处理,想了半天马拉车,KMP和hash不会写,看了题解才发现只用处理前缀就好了,原来是题目没看懂啊(流汗黄豆)

那么就很好做了。从前往后扫一遍,先考虑删括号对,’(‘ 出现时才会出现括号对,那么直接跳过中间一个,因为无论是什么都没影响,无非删括号还是回文的区别。

’)‘先出现那么只有回文串的情况了,直接往后找第一个’(‘ ,中间有多少的’)‘都被回文串包括进去,注意边界就好了。

参考代码:

/*keep on going and never give up*/#includeusing namespace std;#define int long long#define ll long long#define fast std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);inline int read(){    int x=0,k=1; char c=getchar();    while(c'9'){if(c=='-')k=-1;c=getchar();}    while(c>='0'&&c<='9')x=(x<<3)+(x<>s;int len=0,step=0;for(int i=0;i<n;){if(i==n-1) { len=1;break;}if(s[i]=='('){step++;i+=2;}else{int j=i+1;while(j<n&&s[j]!=')')j++;if(j<n){step++;i=j+1;}else {len=n-i;break;}}}cout<<step<<" "<<len<<endl; }}