1 条题解
-
1
#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
- 上传者