求助usaco铜组 B
  • 板块学术版
  • 楼主Kniqht
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/12/17 12:35
  • 上次更新2023/12/17 13:18:12
查看原帖
求助usaco铜组 B
315205
Kniqht楼主2023/12/17 12:35

是的这里有个傻逼做不出来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;
}
2023/12/17 12:35
加载中...