可以先看
查看原帖
可以先看
800385
chenyibo_Jack楼主2024/8/20 20:39

这题可以根据NOIP2017切割绳子改一下

NOIP2017切割绳子

#include<iostream>
using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; // 绳子长度
int main()
{
    cin >> n;
    count = 0;
    for (i = 0; i < n; i++)
    {
        cin >> len[i];
        count += len[i];
    }
    cin >> m;
    if (count < m)
    {
        cout << "Failed" << endl;
        return 0;
    }
    lbound = 1;
    ubound = 1000000;
    while (lbound < ubound)
    {
        mid =  (lbound + ubound +1) / 2;
        count = 0;
        for (i = 0; i < n; i++)
            count += len[i]/mid;
        if (count < m)
            ubound = mid - 1;
        else
            lbound = mid;
    }
    cout << lbound << endl;
    return 0;
}

可以过得代码

#include<iostream>
using namespace std;
long long n, m, i, lbound, ubound, mid, count,a=0;
long long len[100000]; 
int main() {
       cin >> n>>m;
       count = 0;
       for (i = 0; i < n; i++) {
              cin >> len[i];
              a=max(a,len[i]);
               count += len[i];
              
       }
       if (count< m) {
              cout << "0" << endl;
              return 0;
       }
       lbound = 1;
       ubound = a;
       while ( lbound <= ubound    ) {
              mid = (lbound + ubound +1) / 2      ;
              count = 0;
              for (i = 0; i < n; i++)
                      count += len[i]/mid  ;
              if (count < m)
                     ubound = mid - 1;
              else if(count == m) lbound=mid+1;
			   else if(count > m) lbound=mid+1;
              else
                     lbound = mid;
       }
       cout << lbound-1 << endl;
       return 0;
}
2024/8/20 20:39
加载中...