Codeforces Round #653 (Div. 3)C - Move Brackets

C - Move Brackets

题意:一共给你2n个阔号,一半是 '(' ,一半是 ')' 这些括号是乱序的,你可以把某个阔号往最头上或者是最后面放置,问问你最少几次可以把阔号匹配完成。
题解:这个题,你会发现,一个括号往开头放和往结尾放置他的代价是相同的,开阔号的话必然是往开头放,闭括号肯定是往结尾放,那么我么可以选择只动一个类型的阔号,比如说只动闭阔号,我们从头往后遍历,当开阔号数量小于闭阔号数量时,我们选择移动一个闭阔号往右端(同时减去一个闭阔号的数量)。不断记录即可

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 2e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;

string s;
int main()
{
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        cin>>s;
        int ans1=0,ans2=0;
        int sum=0;
        for(int i=0;i<n;i++){
            if(s[i]=='(') ans1++;
            else ans2++;
            if(ans2>ans1) sum++,ans2--;
        }
        cout<<sum<<endl;
    }
    return 0;
}

题解 文章被收录于专栏

主要写一些题目的题解

全部评论

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务