作业介绍

割绳子

#include<bits/stdc++.h>
using namespace std;
int arr[40000];
int main()
{
    int n,m,sum=0;//sum求总和
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>arr[i];
        sum+=arr[i];
    }
    //求出假设可以绳子拼接,每个孩子最大可以分到绳子长度为平均值
    int arv = sum/m;//不考虑小数部分
    /*从最大可分到的长度开始不断枚举递减,
    比如我们先假设每个同学能分到arv长的绳子,
    然后看看每根绳子能剪出几个 arv的长度,把能剪出的段数都加起来。
    看看加起来的段数够不够分给所有同学。如果够分,那此时arv的值就是每个同学能分到的最长长度啦。
    如果不够分,我们就把长度变短一点,比如变成arv-1米,再重新算一遍。
    */
    int sum2;//代表总段数
    for(int i=arv;i>=1;i--)
    {
        sum2=0;
        for(int j=1;j<=n;j++)
        {
            sum2+=arr[j]/i;
        }
        if(sum2>=m)
        {
            cout<<i;
            return 0;
        }
    }
    return 0;
}

24 1896
900 43 218 489 853 751 987 947 545 66 736 577 839 343 229 867 475 236 141 330 436 124 1000 880

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
10
开始时间
2025-1-15 0:00
截止时间
2222-1-26 23:59
可延期
24 小时