社区讨论

20pts 为什么逻辑不对

P1181数列分段 Section I参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mez98wr3
此快照首次捕获于
2025/08/31 13:33
6 个月前
此快照最后确认于
2025/11/03 23:39
4 个月前
查看原帖
CPP
//原题 : 洛谷 P1181 数列分段 
#include <iostream>
#include <cstring>
using namespace std;
const int MaxSize = 100000;
int main()
{
    int n,m,a[100000];
    bool visited[100000];
    memset(visited,0,sizeof(visited));
    cin >> n >> m;
    for (int i=0;i<n;i++)
        cin >> a[i];
    unsigned long long ans = 0;
    for (int i=0;i<n;i++)  
    {
        if (!visited[i]) //若这个下标没有被加过
        {
            visited[i] = 1; //标记已经被加过了
            int sum = a[i];//初始化本段的数字之和为第一个数(a[i])
            int j = i;  //因为后面是 ++j 所以初始化为i本身
            while(sum < m)  //若本段和不大于 m 
            {
                visited[++j] = true; //扩展本段 并且标记
                sum += a[j];  //和累加
            }
            ans++; //执行到这里 说明上面的while循环已经不满足条件,分段数要加一组
        }
    }
    cout << ans;
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...