P1181 数列分段Section I

题目描述

对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。

输入输出格式

输入格式:

输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述。

输出格式:

输出文件divide_a.out仅包含一个正整数,输出最少划分的段数。

输入输出样例

输入样例#1:

5 6
4 2 4 5 1
输出样例#1:

3

说明

对于20%的数据,有N≤10;

对于40%的数据,有N≤1000;

对于100%的数据,有N≤100000,M≤10^9,M大于所有数的最小值,A[i]之和不超过109。

将数列如下划分:

[4][2 4][5 1]

第一段和为4,第2段和为6,第3段和为6均满足和不超过M=6,并可以证明3是最少划分的段数。

思路:

  用now来记录当前段数所形成的和,如果大于最大的数m,则更新ans(即ans++),并且将now更新为当前输入的数(a[i]),可以手动模拟一下~

  然后就是特殊情况(即now==m),因为刚好能够构成一段所以跟前面组成一段,所以将now置为0,ans++.

  然后又因为输出的是段数,刚才的做法统计的是隔板的数目,所以在最后一块的时候需要判断是恰好组成一段(即now==m),还是又多了一段(即now<m),因为now<m的情况我们并没有进行考虑,所以加个特判:如果i==n && now==m 时ans++.

  输出ans,程序结束.

坑点:

  1)要看好输出什么

  2)要开long long

代码:

#include <iostream>
#include <cstdio>
#define LL long long using namespace std; const int M = 1e5 + ;
LL n,m,now,ans;
LL a[M]; int main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
now+=a[i];
if(now>m)
{
now=a[i];
ans++;
}
else
if(now==m)
{
now=;
ans++;
}
else
if(now<m && i==n)///特判
{
ans++;
}
}
printf("%lld",ans);
return ;
}

End.

luogu P1181 数列分段Section I x的更多相关文章

  1. luogu P1182 数列分段Section II

    题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...

  2. 洛谷 P1181数列分段Section I

    星爆气流(弃疗)斩!                                            ——<刀剑神域> 题目:https://www.luogu.org/proble ...

  3. P1181 数列分段Section I

    题目描述(跳转) 对于给定的一个长度为NN的正整数数列A_iAi​,现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 第1 ...

  4. 洛谷 P1181 数列分段Section I【贪心/最少分成多少合法的连续若干段】

    题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...

  5. 洛谷 P1181 数列分段Section I(水题日常)

    题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...

  6. 洛谷p1181 数列分段section I

    #include<iostream> #include<vector> #include<algorithm> using namespace std; int M ...

  7. 洛谷 P1181,1182 数列分段Section

    数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ...

  8. P1182 数列分段Section II

    P1182 数列分段Section II 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 ...

  9. 洛谷 P1182 数列分段 Section II

    洛谷 P1182 数列分段 Section II 洛谷传送门 题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. ...

随机推荐

  1. HTML笔记(一) 基础标签的介绍

    一个最基本的html文件,必须包含<html>, <head> 和<body> 三个标签 以及<!doctype>声明 1. <!DOCTYPE& ...

  2. mac搭建apace和php开发环境

    启动Apache   1 先介绍几个命令 // 启动Apache服务 sudo apachectl start // 重启Apache服务 sudo apachectl restart // 停止Ap ...

  3. Redis配置主从时报错“Could not connect to Redis at 192.168.0.50:6379: Connection refused not connected>”

    配置Redis主从时,修改完从节点配置文件,然后报错 [root@Rich七哥-0-50 redis]# /opt/redis/redis-cli -h 192.168.0.50 Could not ...

  4. Qt - 基于TCP的网络编程

    TCP(传输控制协议 Transmission Control Protocol) 可靠.面向数据流.面向连接  的传输协议.(许多应用层协议都是以它为基础:HTTP.FTP) 使用情况: 相比UDP ...

  5. Hbase 三维存储

    hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.row ...

  6. noip2013day1-货车运输

    题目描述 \(A\)国有\(n\)座城市,编号从 \(1\)到\(n\),城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 \(q\) 辆货车在运输货物, 司机们想知 ...

  7. sql server 角度与弧度相互转换的函数radians(x)和degrees(x)

    --RANDIANS(x)将参数x由角度转换为弧度 --DEGREES(x)将参数x由弧度转换为角度. 示例:select RADIANS(90.0), RADIANS(180.0), DEGREES ...

  8. jQuery中outerWidth()方法

    截图自:菜鸟教程https://www.runoob.com/jquery/html-outerwidth.html

  9. springboot学习1

    gradle环境配置 https://www.w3cschool.cn/gradle/ctgm1htw.html Spring profile 多环境配置管理 参考:https://www.cnblo ...

  10. Activity安装与使用

    详细安装步骤:http://blog.csdn.net/oyzl68/article/details/16817963