比赛 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;
}