B. Plus-Minus Split

原题链接

如何得到思路

1.我们不能模拟题目的意思去做,因为那样会超时(别问我怎么知道的)。我们要抓住一些事实
2.对于任意序列想要得到最小值,可以只有两种分法:

  • 一连串和为零的序列
  • 长度为1的序列

3.最长的和为零的序列长度必为2min(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;
}

posted @   纯粹的  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示