- [柳泉中学,龙凤苑中学,科技苑中学]拔高班第八次训练
T4题解
- @ 2025-4-30 21:27:21
前缀和 用sum1[i]表示前i个字符中‘1’的个数,sum0[i]表示前i个字符中‘0’的个数;可得前i个字符的可爱值为$$ s1=sum1[i]-sum0[i] $$i后面的字符的可爱值为$$ s2=(sum1[n]-sum1[i])-(sum0[n]-sum0[i]) $$每次将答案$$ans$$更新为$$max(ans,s1*s2)$$
CODE:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,sum1[N],sum0[N];
char s[N];
int query1(int l,int r)
{
return sum1[r]-sum1[l-1];
}
int query0(int l,int r)
{
return sum0[r]-sum0[l-1];
}
signed main()
{
cin>>n;
cin>>(s+1);
for(int i=1;i<=n;i++) sum1[i]=sum1[i-1]+(s[i]=='1'),sum0[i]=sum0[i-1]+(s[i]=='0');
int ans=-1e18;
for(int i=1;i<n;i++)
{
int s1=query1(1,i)-query0(1,i),s2=query1(i+1,n)-query0(i+1,n);
ans=max(ans,s1*s2);
}
cout<<ans;
}
0 comments
No comments so far...