My name is IKUN(已开学) 2025-02-01 18:42 采纳率: 55.6%
浏览 24

洛谷P9975 76(WA)


#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;
}
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2025-02-01 18:42
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在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的和。最后,它打印出所有可能的和。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月1日