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

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…
题目描述(跳转) 对于给定的一个长度为NN的正整数数列A_iAi​,现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 第1行包含两个正整数N,MN,M,表示了数列A_iAi​的长度与每段和的最大值,第22行包含NN个空格隔开的非负整数A_iAi​,如题目所述. 输出格式: 一个正整数,输出最少划分的段数. 输入输出样例 输入样例#1: 复制 5 6 4 2 4 5 1 输出样例#1: 复制 3 说明 对于20\%20%…
题目描述 对于给定的一个长度为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: …
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述. 输出格式: 输出文件divide_a.out仅包含一个正整数,输出最少划分的段数. 输入输出样例 贪心 屠龙宝刀点击就送 #include <cstdio> vo…
星爆气流(弃疗)斩!                                            ——<刀剑神域> 题目:https://www.luogu.org/problem/P1181 这题真的是水题啊.不过他的提示略微具有迷惑性. 它把4 2 4 5 1分成三段[4][2 4][5 1],但是按我的做法,他应该这么分:[4 2][4][5 2] 这么看做法就很明显了,从头向后扫描,当前面的数的和超过了m就把当前的和变成0,让段数加一. 废话不多说,上代码. #include…
#include<iostream> #include<vector> #include<algorithm> using namespace std; int M, N; int main(){ cin >> M >> N; vector<int> temp; ; i < M; i++){ int n; cin >> n; ){ ] + n <= N){ temp[temp.size() - ] += n;…
数列分段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…
P1182 数列分段Section II 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 2][4 5][1] 第一段和为6,第2段和为9,第3段和为1,和最大值为9. 将其如下分段: [4][2 4][5 1] 第一段和为4,第2段和为6,第3段和为6,和最大值为6. 并且无论如何分段,最大值不会小于6. 所以可以得到要将数列4 2 4 5…
洛谷 P1182 数列分段 Section II 洛谷传送门 题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 142451要分成33段 将其如下分段: [4 2][4 5][1][42][45][1] 第一段和为66,第22段和为99,第33段和为11,和最大值为99. 将其如下分段: [4][2 4][5 1][4][24][51] 第一段和为44,第22段和为…
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 2][4 5][1] 第一段和为6,第2段和为9,第3段和为1,和最大值为9. 将其如下分段: [4][2 4][5 1] 第一段和为4,第2段和为6,第3段和为6,和最大值为6. 并且无论如何分段,最大值不会小于6. 所以可以得到要将数列4 2 4 5 1要分成3段,每段和的最大值最小为6. 输…
题目描述 对于给定的一个长度为N的正整数数列 A-iA−i ,现要将其分成 M(M≤N)M(M≤N) 段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列 4 2 4 5 142451 要分成 33 段 将其如下分段: [4 2][4 5][1][42][45][1] 第一段和为 6 ,第 2 段和为 9 ,第 3 段和为 1 ,和最大值为 9 . 将其如下分段: [4][2 4][5 1][4][24][51] 第一段和为 4 ,第 2 段和为 6 ,第 3 段和为 6 ,…
题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 142451要分成33段 将其如下分段: [4 2][4 5][1][42][45][1] 第一段和为66,第22段和为99,第33段和为11,和最大值为99. 将其如下分段: [4][2 4][5 1][4][24][51] 第一段和为44,第22段和为66,第33段和为66,和最大值为66. 并且无论如何分段,最…
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 2][4 5][1] 第一段和为6,第2段和为9,第3段和为1,和最大值为9. 将其如下分段: [4][2 4][5 1] 第一段和为4,第2段和为6,第3段和为6,和最大值为6. 并且无论如何分段,最大值不会小于6. 所以可以得到要将数列4 2 4 5 1要分成3段,每段和的最大值最小为6. 输…
题目描述 对于给定的一个长度为N的正整数数列A-i,现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 2][4 5][1] 第一段和为6,第2段和为9,第3段和为1,和最大值为9. 将其如下分段: [4][2 4][5 1] 第一段和为4,第2段和为6,第3段和为6,和最大值为6. 并且无论如何分段,最大值不会小于6 所以可以得到要将数列4 2 4 5 1要分成3段,每段和的最大值最小为6. 输入格…
洛谷传送门 输入时处理出最小的答案和最大的答案,然后二分答案即可. 其余细节看代码 #include <iostream> #include <cstdio> using namespace std; ], x, y, ans = ; bool pd(int mid) { , tot = ; ; i <= n; i++) { sum += a[i]; if(sum > mid)//分段数+1 { sum = a[i]; tot++; } } ; ;//如果是小于m的话也…
题目描述 对于给定的一个长度为NN的正整数数列A_iAi​,现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 第1行包含两个正整数N,MN,M,表示了数列A_iAi​的长度与每段和的最大值,第22行包含NN个空格隔开的非负整数A_iAi​,如题目所述. 输出格式: 一个正整数,输出最少划分的段数. 输入输出样例 输入样例#1: 复制 5 6 4 2 4 5 1 输出样例#1: 复制 3 说明 对于20\%20%的数据,…
传送门 思路: 求数列每段和的最大值的最小值,很明显是用二分法求解,加贪心检验.本题关键是要怎么去高效的check,可以考虑一个贪心的思路,能加的就加上,不能则新开一段,so对于二分的值 u ,我们从数列 sum 从前往后扫,如果 tot 大于了 u ,我们不加而是 tot 重新赋值并且 cnt++ ,最后只需判断 cnt 是否不小于 m 就行了.这样判断与前缀和一样是O(n)的复杂度,但是节省了空间且容易思考. 标程: #include<iostream> #include<algor…
洛谷传送门 输入时处理出最小的答案和最大的答案,然后二分答案即可. 其余细节看代码 #include <iostream> #include <cstdio> using namespace std; ], x, y, ans = ; bool pd(int mid) { , tot = ; ; i <= n; i++) { sum += a[i]; if(sum > mid)//分段数+1 { sum = a[i]; tot++; } } ; ;//如果是小于m的话也…
题目描述 对于给定的一个长度为\(N\)的正整数数列\(A_i\),现要将其分成连续的若干段,并且每段和不超过\(M\)(可以等于\(M\)),问最少能将其分成多少段使得满足要求. 分析 简单思考一下,首先这是一段连续的区间,所以一般是不能使用sort. 如果要考虑贪心的话,我们只能采取最简单的方法,也就是每一段求一下,用一个tmp扫一下,如果可以将当前的数加入tmp中,那么就加进去,不行的话重新开一段区间. AC代码 #include <bits/stdc++.h> using namesp…
这道题让我见识了二分的新姿势.本来,我是二分的位置的. 思路:直接二分答案x, 关键是检验函数的写法: 先用前缀和 a[i....], 看满足多少段满足 a[ j ]-a[ i ]<=x; 的注意这里利用了贪心(因为,要使最大值最小,那么每一段要尽量接近x),然后,如果这样的段数刚好等于m 段时,就判断正确了. 当然,在二分的时候也要向左边二分答案,毕竟是在求最小化. #include<iostream> #include<algorithm> using namespace…
[代码]: #include<bits/stdc++.h> const double eps = 1e-8; const int maxn = 1e6+5; #define inf 0x3f3f3f3f #define ll long long using namespace std; int n,m; int a[maxn]; int check(int x) { int sum = 0, cnt = 1;//r是划分的段数,所以要从1开始(相当于植树问题啦) for(int i=1; i&…
[题解] 最大值最小化,那么一般要联想到二分.二分一个最大值,然后check一下能否分成小于等于m段即可. #include<cstdio> #include<algorithm> #include<cstring> #define LL long long #define rg register #define N 200010 using namespace std; int n,m,l,r,mid,a[N]; inline int read(){ ,f=; cha…
https://www.luogu.org/problemnew/show/P1182 洛谷上的题目. 以后如果遇到1e5什么的   用二分试试! #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<string> #include<cmath> #include<set&…
https://www.luogu.org/problemnew/show/P1182 做了这个题才知道二分的强大 这个题可以假设我们有n个果子 m个容器 要能把果子全装进去 那么容器最小可以是多小 很显然 如果我们的容器每一个都能把全部的果子装进去 那么一定是一种可行的解 但不是最优的 容器最小是多小呢?至少要能装得下最大的果子 所以答案就在 maxAi 和 sumAi 之间 进行二分查找即可 如果当前的mid是容器的容量,求出来需要多少容器 如果比 m 多 那么说明 mid 太小了 如果小于…
201509-1  数列分段 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示给定的数列,相邻的整数之间用一个空格分隔. 输出格式 输出一个整数,表示给定的数列有多个段. 样例输入 8 8 8 8 0 12 12 8 0 样例输出 5 样例说明 8 8 8是第一段,0是第二段,12 12是第三段,倒数第二个整数8是第四段,最后一个0是第五段. 评…
P1578 -- [NOIP福建夏令营]数列分段 时间限制:1000MS      内存限制:131072KB 状态:Accepted      标签:    二分   无   无 Description 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段:[4 2][4 5][1] 第一段和为6,第2段和为9,第3段和为1,和最大值为9. 将其如下分段:[4][2…
试题名称: 数列分段 试题编号: 201509-1 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示给定的数列,相邻的整数之间用一个空格分隔. 输出格式 输出一个整数,表示给定的数列有多个段. 样例输入 8 8 8 8 0 12 12 8 0 样例输出 5 样例说明 8 8 8是第一段,0是第二段…
题目链接:http://118.190.20.162/view.page?gpid=T32 问题描述 试题编号: 201509-1 试题名称: 数列分段 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示给定的数列,相邻的整数之间用一个空格分隔. 输出格式 输出一个整数,表示给定的数列有…
1436:数列分段II 题解 二分答案 我们最终答案的取值区间是[  max(a[i])  ,   ∑a[i]  ] 设定 l=max(a[i]) , r=∑a[i]  , mid不断二分 mid表示每段和的最大值,也就是每段和都不超过mid 放到check函数里,计算一下在mid为最大值的情况下可以分成多少段 如果段数 cnt > m ,说明这个mid小了,它还可以再大一点 如果段数 cnt <= m , 说明这个mid大了,那么它就要小一点了,由于此时cnt可能等于m,这个mid为候选答案…
10014. 「一本通 1.2 练习 1」数列分段 II 题目描述 对于给定的一个长度为 n 的正整数数列 A ,现要将其分成 m 段,并要求每段连续,且每段和的最大值最小. 例如,将数列 4,2,4,5,1 要分成 3 段: 若分为 [4,2][4,5][1]  ,各段的和分别为 6,9,1 ,和的最大值为9 : 若分为 [4][2,4][5,1]  ,各段的和分别为 4,6,6 ,和的最大值为 6: 并且无论如何分段,最大值不会小于6 . 所以可以得到要将数列 4  2 4 5 1 要分成…