4.4Codeforces Round 935 (Div. 3)

涤生yang發表於2024-04-05

//計數不要輕易採用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;
}

相關文章