MorsLin 的博客

MorsLin 的博客

前事不忘,后事之师

题解 CF1023C 【Bracket Subsequence】

posted on 2018-08-19 09:47:55 | under 题解 |

$b$为答案字符串,我们枚举$a$数组中的每一个括号,每扫到一个括号,就把它加入$b$里,如果为左括号,$cnt{+}{=}1$,当$cnt==m/2$就跳出循环,然后从后面补右括号就行了

没初始化$b$数组,FST了…… QAQ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
    int n,m; cin>>n>>m; m/=2;
    char a[200010],b[200010]; cin>>a;
    memset(b,0,sizeof(b));
    int len=strlen(a)-1,tot=0,cnt=0;
    for(int i=0;i<=len;i++){
        if(a[i]=='('){
            b[tot++]='(';
            cnt++;
        }
        if(cnt==m) break;
        if(a[i]==')'){
            b[tot++]=')';
        }
    }
    for(int i=tot;i<m*2;i++) b[i]=')';
    cout<<b;
    return 0;
}