是的这里有个傻逼做不出来B,7/12WA,不知道哪里有问题
我觉得可以证明传播时间越久,初始传染源越少,所以求出最大传播时间(res)后再循环一遍求即可。
不知道哪里有问题,可能是思路问题/kk
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
const int N=3e5+10;
int n,len[N],m;
char s[N];
int ans;
signed main(){
scanf("%lld",&n);
scanf("%s",s+1);
int cnt=0;
for(int i=1;i<=n;i++){
if(s[i]=='0'&&s[i-1]=='1') len[++m]=cnt,cnt=0;
else if(s[i]=='1') cnt++;
}
if(s[n]=='1') len[++m]=cnt;
int res=2e9;
for(int i=1;i<=m;i++){
int t=(len[i]-1)/2;
res=min(res,t);
}
for(int i=1;i<=m;i++){
int t=len[i]/(res*2+1);
ans+=t+(len[i]%(res*2+1)!=0?1:0);
}
printf("%lld",ans);
return 0;
}