#include<bits/stdc++.h>
using namespace std;
long long m,n;
long long a[300010];
bool ch(int mid){
int sum=0;
for(int i=1;i<=m;i++){
if(a[i]%mid!=0){//不能整除,就还得有一个小朋友把剩下的拿完,小朋友加一
sum++;
}
sum+=a[i]/mid;
}
return sum>=n;
}
int main(){
cin>>n>>m;
long long l=0,r=0,mid,ans;
for(int i=1;i<=m;i++){
cin>>a[i];
r=max(r,a[i]);
}
while(l<=r){
mid=l+(r-l)/2;
if(ch(mid)){
ans=mid;
l=mid+1;
}
else{
r=mid-1;
}
}
cout<<ans;
return 0;
} ```
这样不能AC,答案也是错的
而
#include<bits/stdc++.h>
using namespace std;
long long m,n;
long long a[300010];
bool ch(int mid){
int sum=0;
for(int i=1;i<=m;i++){
if(a[i]%mid!=0){//不能整除,就还得有一个小朋友把剩下的拿完,小朋友加一
sum++;
}
sum+=a[i]/mid;
}
return sum<=n;
}
int main(){
cin>>n>>m;
long long l=0,r=0,mid,ans;
for(int i=1;i<=m;i++){
cin>>a[i];
r=max(r,a[i]);
}
while(l<=r){
mid=l+(r-l)/2;
if(ch(mid)){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<ans;
return 0;
}
这样就可以