30分,后面的几个测试点一直没有过,还望大佬指点
查看原帖
30分,后面的几个测试点一直没有过,还望大佬指点
718441
7070SIR楼主2022/5/10 22:35
#include<iostream>
using namespace std;
long long  n, r,l;
long long  ans ;
long long  a[300009];
int m;
bool check(long long  mid)
{
    long long  sum = 0;
    for(int i=1;i<=mid;i++)
    {
       sum+=(a[i]+mid-1)/mid;
    }
    return sum<=n;
    
}
int main()
{
    scanf("%lld%d",&n,&m);//n 孩子数, m 各种颜色弹珠数
    for(int i=1;i<=m;i++)
    {
        scanf("%lld",&a[i]);
        r += a[i];//右边界确定
    }
    while(r>=l)
    {
        long long  mid = (r + l)/2;
        if(check(mid))
        {
            r = mid-1;
            ans = mid;
        }
        else
            l = mid+1;
    }
    cout << ans << endl;
    return 0;
}


2022/5/10 22:35
加载中...