tobo推荐补一下最近的edu
所以看了一下
这场的E好水啊。。
注意到k最大为5,然而是个假信息。这题与k大小无关
注意到最优决策时,是从右边开始进行括号匹配,而每对括号的贡献是括号内的括号数量/2
所以直接贪了
#include<bits/stdc++.h>
using namespace std;
const int P=998244353,N=3e5+10;
using ll=long long;
char str[N];
void solve()
{
int k;scanf("%d",&k);
scanf("%s",str+1);
int n=strlen(str+1);
priority_queue<int>heap;
vector<int>stk;
ll rs=0;
for(int i=n;i;--i)
{
if(str[i]=='(')
{
rs+=stk.back()-i-1;
heap.push(stk.back()-i-1);stk.pop_back();
}
else stk.push_back(i);
}
while(heap.size())
{
if(k==0)break;
--k;
rs-=heap.top();heap.pop();
}
printf("%lld\n",rs/2);
}
int main()
{
int T=1;scanf("%d",&T);
while(T--)solve();
}