B. Plus-Minus Split
如何得到思路
1.我们不能模拟题目的意思去做,因为那样会超时(别问我怎么知道的)。我们要抓住一些事实
2.对于任意序列想要得到最小值,可以只有两种分法:
- 一连串和为零的序列
- 长度为1的序列
3.最长的和为零的序列长度必为\(2*min(a,b)\),其中ab分别代表01的个数,剩余的序列无法再得到和为零,所以将其单个分开
更新:我们可以一点一点地构造数据试探
\(Code\)
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)
{
int n,ans=0;
cin>>n;
string s;
cin>>s;
for(int i=0;s[i];i++)
if(s[i]=='+') ans++;
else ans--;
cout<<abs(ans)<<endl;
}
return 0;
}

浙公网安备 33010602011771号