题解:ABC319D - Minimum Width

题解:ABC319D - Minimum Width

·题目

链接:Atcoder。

链接:洛谷。

·难度

算法难度:B。

思维难度:A。

调码难度:A。

综合评价:普及/提高-。

·算法

二分答案+贪心验证。

·思路

由于满足单调性,我们二分最后的宽度,当然范围是“每个单词长度的最大值”到“一个很大的数(设成1e15即可)”。我们只需要用贪心验证每个mid的宽度是否能够在m行之内装下所有单词即可。

·代价

O(n*log(一个数)),反正肯定够用。

·细节

贪心验证用单独函数“calc”实现。

·代码

#include
#define N 220000
using namespace std;
long long a[N]={},m=0,mx=0,n=0;
bool calc(long long num);
int main(){
    scanf("%lld%lld",&n,&m);
    for(long long i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        mx=max(mx,a[i]);
    }
    //输入,并找到单词长度最大值
    long long l=mx-1,r=1e15+1;
    //确定双端便边界,开始二分
    while(l+1

·注意

二分边界别设错了,否则会WA。

你可能感兴趣的:(算法,二分答案)