比赛 |
20170919普及组 |
评测结果 |
AAAAAAAAAA |
题目名称 |
划分数列 |
最终得分 |
100 |
用户昵称 |
玉带林中挂 |
运行时间 |
0.036 s |
代码语言 |
C++ |
内存使用 |
0.67 MiB |
提交时间 |
2017-09-19 21:06:48 |
显示代码纯文本
- #include <stdio.h>
- #include <stdlib.h>
- #include <algorithm>
- #include <list>
- #include <queue>
- #include <vector>
- #include <ctype.h>
- using namespace std;
- #define MAXN 100011
- int fast_read()
- {
- int r = 0;
- char c;
- bool sig = false;
- while(c = getchar())
- {
- if(c >= '0' && c <= '9')
- {
- r = c^0x30;
- break;
- }else if(c == '-')
- sig = true;
- }
- while(isdigit(c = getchar()))
- r = (r<<3)+(r<<1)+(c^0x30);
- if(sig)return -r;
- return r;
- }
- int n, t;
- int sum[MAXN];
- bool check(int m)
- {
- int cnt = 0;
- int last = 1;
- for(int i = 1; i <= n; i++)
- {
- if(sum[i] - sum[i-1] > m)return false;
- if(sum[i] - sum[last-1] > m)
- {
- cnt++;
- last = i;
- }
- }
- return cnt < t;
- }
- int main()
- {
- freopen("seqa.in", "r", stdin);
- freopen("seqa.out", "w", stdout);
- scanf("%d %d", &n, &t);
- for(int i = 1; i <= n; i++)
- sum[i] = sum[i-1]+fast_read();
- int l = 0, r = 0x7fffffff;
- int ans;
- while(l <= r)
- {
- int m = (l+r)>>1;
- if(check(m))ans = m, r = m-1;
- else l = m+1;
- }
- printf("%d\n", ans);
- return 0;
- }