欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > #E. NH.2023.小甲.05.文本框

#E. NH.2023.小甲.05.文本框

2026/4/27 22:39:47 来源:https://blog.csdn.net/WOZHISHANGHENDI/article/details/144765346  浏览:    关键词:#E. NH.2023.小甲.05.文本框

题目描述

小慧把她学会的英文单词记录了下来,现在她希望在一个文本框里完全显示出她记录的单词库。已知这个文本框最多只能显示 MM 行,小慧的单词库有 NN 个单词,要求按原次序显示所有单词,每个单词至少要用一个空格分开,而且一个单词的所有字母必须放在同一行。问这个文本框至少需要多宽才能满足小慧的需求。

输入格式

第一行,两个正整数 N,MN,M。

第二行,NN 个正整数,表示每个单词的长度。

输出格式

能把所有单词显示出来的文本框的最少宽度。

样例

输入数据 1

13 3
9 5 2 7 1 8 8 2 1 5 2 3 6

Copy

输出数据 1

26

Copy

输入数据 2

30 8
8 55 26 97 48 37 47 35 55 5 17 62 2 60 23 99 73 34 75 7 46 82 84 29 41 32 31 52 32 60

Copy

输出数据 2

189

Copy

数据范围

对于 40% 的数据,1 \le N,M \le 10^31≤N,M≤103,每个单词的长度 \le 10^2≤102。

对于 100% 的数据,1 \le N,M \le 2*10^51≤N,M≤2∗105,每个单词的长度 \le 10^9≤109。

上一篇也是这个,不会以为没了把?

//钵钵鸡之王专属水印

#include<bits/stdc++.h>

using namespace std;

long long n,k,a[10000005];

bool ok(long long x){

    long long s=1;

    long long q=0;

    for(int i=1;i<=n;i++){

        if(a[i]-1>x){

            return 0;

        }

        if(q+a[i]-1>x){

            s++;

            q=0;

        }

        q+=a[i];

    }

    if(q>x)s++;

    return s<=k;

}

int main(){

    cin>>n>>k;

    for(int i=1;i<=n;i++){

        cin>>a[i];

        a[i]++;

    }

    long long l=0,r=1e12;

    while(l+1<r){

        long long mid=(l+r)/2;

        if(ok(mid))r=mid;

        else l=mid;

    }

    cout<<r;

    return 0;

}

呵呵,金色传说!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词