1 条题解

  • 1
    @ 2025-3-29 11:54:31

    #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; }

    • 1

    信息

    ID
    1020
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    24
    已通过
    7
    上传者