ABC393D题解
Lovely_yhb · · 题解
题意
给定一个长度为
思路
容易发现最中间的
如何确定最中间的?考虑
对于每个为
这是因为如果从
如果
AC Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+5;
int n,cnt=0,cur=0,a[N],ans=0;
char s[N];
signed main(){
cin>>n;
cin>>s+1;
for(int i=1;i<=n;i++) if(s[i]=='1') a[++cnt]=i;
if(cnt&1){
int mid=(cnt+1)/2,val=a[(cnt+1)/2];
for(int i=1;i<=cnt;i++) ans+=max(0ll,abs(val-a[i])-abs(mid-i));
cout<<ans;
}else{
int mid1=cnt/2,mid2=cnt/2+1;
int t1=0,t2=0;
for(int i=1;i<=cnt;i++) t1+=max(0ll,abs(a[mid1]-a[i])-abs(mid1-i));
for(int i=1;i<=cnt;i++) t2+=max(0ll,abs(a[mid2]-a[i])-abs(mid2-i));
cout<<min(t1,t2);
}
return 0;
}