luogu P1181 数列分段Section I x
P1181 数列分段Section I
题目描述
对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。
输入输出格式
输入格式:
输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述。
输出格式:
输出文件divide_a.out仅包含一个正整数,输出最少划分的段数。
输入输出样例
5 6
4 2 4 5 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的更多相关文章
- luogu P1182 数列分段Section II
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
- 洛谷 P1181数列分段Section I
星爆气流(弃疗)斩! ——<刀剑神域> 题目:https://www.luogu.org/proble ...
- P1181 数列分段Section I
题目描述(跳转) 对于给定的一个长度为NN的正整数数列A_iAi,现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 第1 ...
- 洛谷 P1181 数列分段Section I【贪心/最少分成多少合法的连续若干段】
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...
- 洛谷 P1181 数列分段Section I(水题日常)
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...
- 洛谷p1181 数列分段section I
#include<iostream> #include<vector> #include<algorithm> using namespace std; int M ...
- 洛谷 P1181,1182 数列分段Section
数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ...
- P1182 数列分段Section II
P1182 数列分段Section II 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 ...
- 洛谷 P1182 数列分段 Section II
洛谷 P1182 数列分段 Section II 洛谷传送门 题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. ...
随机推荐
- mybatis返回List<Map>
mapperl.xml中: <select id="getAmount" parameterType="int" resultType="jav ...
- deepin下安装Qt5&以及部分问题解决
deepin安装Qt5 1 deepin商店里的Qt5版本太低,可以直接下载官方的Qt5安装包: 官方下载渠道:http://www.qt.io/download-open-source/ 离线镜像下 ...
- redis漏洞攻击
参考: https://www.cnblogs.com/kobexffx/p/11000337.html 利用redis漏洞获得root权限,挖矿. 解决方法: 用普通帐号启redis,用云的redi ...
- Luogu P1948 [USACO08JAN]Telephone Lines
题目 两眼题 二分一个\(lim\),然后跑最短路(边权\(\le lim\)的边长度为\(0\),\(>lim\)的长度为\(1\)),然后判断\(dis_{1,n}\le k\). #inc ...
- 滑雪(dp或记忆化搜索)
题意:给你一个二维数组,求最长的递减路线的长度,只能向四个方向延伸. 解法1.dp[i][j]以i.j结尾的最长路线长度.边界:每个数初值为1, 转移:从四周向i.j转移,if(a[i][j]> ...
- DNS 缓存投毒
原文:[DNS Cache Poisoning]( https://medium.com/iocscan/dns-cache-poisoning-bea939b5afaf) 译者:neal1991 w ...
- JS全屏事件 模拟键盘事件F11 兼容IE
方法1: // 全屏 //el为全屏对象 fullScreen(el) { var rfs = el.requestFullScreen || el.webkitRequestFullScreen | ...
- java 序列化原来如此
上次面试的时候 ,如何实现java 类的序列化,当时感觉这个问题很简单,我的回答是实现serizlizable 接口就好了,可以实现对象的持久化,看了看书,原来这样: public class Ser ...
- websocket之拨云见雾
websocket是基于http相应的特性弥补其不足(就是个socket,不再是一次请求一次相应) 但缺点就是只有在版本较高的浏览器才支持websocket. 浏览器: <script type ...
- RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass
安全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass.该工具的下载量高达 2800 万次,但这并不意味着下载的所有版本都存在后门,受影响的版本是 v3. ...