二分检验答案
注意一个样例 n<m且n中长度都为1. 应该输出0
#include <iostream> using namespace std; const int maxn = 200010; long long arr[maxn]; int n; long long m; bool judge(long long num) { long long ans=0; for (int i = 1; i <= n; i++) { long long temp = arr[i]; while (temp - num>= 0) { temp-=num; ans++; } } if (ans <m)return false; return true; } long long find(long long l, long long r) { while (l < r) { long long mid = l + (r - l+1) / 2; if (judge(mid))l = mid; else r = mid - 1; } return l; } int main() { scanf("%d%lld",&n,&m); long long maxn = 0; for (int i = 1; i <= n; i++) { scanf("%lld",&arr[i]); maxn = max(maxn, arr[i]); } if(maxn==1&&n<m){ cout<<"0"; return 0; } cout<<find(1, maxn); }