#include<bits/stdc++.h>
using namespace std;
double a[100005];
int main(){
string s;
int n,j=0;
cin>>n>>s;
s+='0';
int sum=0;
for(int i=0;i<=n;i++){
if(s[i]=='1') sum++;
else if(sum) a[++j]=sum,sum=0;
}
double Mt=999999999;
for(int i=1;i<=j;i++){
if(s[0]=='1'&&i==1){
if(a[i]<=1) Mt=0;
else{
Mt=min(Mt,a[i]-1);
}
}
else{
if(a[i]<=2) Mt=0;
else{
Mt=min(Mt,floor((a[i]-1)/2));
}
}
}
sum=0;
for(int i=1;i<=j;i++){
sum+=ceil(a[i]/(2*Mt+1));
}
cout<<sum;
}
洛谷P9975 76(WA)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。
在C++编程中,我们通常使用预处理来减少输入数据的大小和复杂性,特别是在处理大量数据时。在这个例子中,我们需要一个名为
A的数组,用于存储整数。为了计算这个数组中的元素之和,我们可以编写以下函数:#INCLUDE <IOSTREAM> #INCLUDE <VECTOR> INT MAIN() { INT N = 100005, SUM = 0; FOR (INT I = 2; I <= N; ++I) { IF (SUM + I > N) BREAK; SUM += I; } FOR (INT I = 2; I <= N; ++I) { IF (SUM - I >= 0) { COUT << I << " "; SUM -= I; } } RETURN 0; }这段代码首先定义了一个整数向量
A,并初始化其值为100005。然后,它通过循环遍历从2到N的所有整数,并检查它们是否满足条件SUM + I > N。如果满足条件,则将SUM累加到结果变量SUM上。如果满足条件但当前数字已经大于或等于N,则跳出循环。接下来,它对每个找到的可能的和减去当前数字进行处理,直到找到一个小于等于
N的和。最后,它打印出所有可能的和。解决 无用评论 打赏 举报