20pts 为什么逻辑不对
查看原帖
20pts 为什么逻辑不对
1760855
liujiacheng2012楼主2025/8/31 13:33
//原题 : 洛谷 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;
}
2025/8/31 13:33
加载中...