4.4Codeforces Round 935 (Div. 3)

//计数不要轻易采用count
//循环多次计数————采用前缀和

#include<bits/stdc++.h>
using namespace std;
#define int long long
using i64 = long long;

void solve()
{
    int n;cin>>n;
    string s;cin>>s;
    vector<int> pre(n+1);//前缀和数组 
    for(int i=0;i<n;i++)
	{//记录前i个数字中1的数量
        pre[i+1]+=pre[i]+(s[i]=='1'); //借用前一个,来得到前缀和 存到1—n里 
    }
    int ans=1e9;
    vector<int> doc;
    double mid=1.0*n/2;
    for(int i=0;i<=n;i++)
	{
        int ls=i-pre[i],rs=pre[n]-pre[i];//ls是前i个中0的数量, rs是i之后中1的数量 
        if(ls>=(i+1)/2&&rs>=(n-i+1)/2)
		{//满足题目条件 
            if(abs(i-mid)<abs(mid-ans)) 
			{
                ans=i;//更新更小值 
            }
        }
    }

    cout<<ans<<"\n";
}

signed main()
{
    ios::sync_with_stdio(false);cin.tie(nullptr);
    int t = 1; std::cin >> t;
    while(t--) solve();
    return 0;
}

posted @   涤生yang  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示