8-27阿里笔试第一题
哥哥们,我好难受呀。为什么我的思路才过了4%,完全找不到错误的原因呀。
求助
#include <bits/stdc++.h>
using namespace std;
vector<int>v;
bool solve(int k,int lim){// 寻找是否可以添加 k个数,仍然保持当前值为最大值。
int sum=0;
for(int i=0;i<v.size();i++){
if(v[i]<lim){
sum=sum+(lim-v[i]);
}
}
return sum>=k;
}
int main(){
int m,n,temp;
cin>>m>>n;
//v.assign(m,0);
for(int i=0;i<m;i++){
cin>>temp;
v.push_back(temp);
}
sort(v.begin(),v.end());
long long l=0;
long long r=1e9;
long long ans=0;
while(l<r){
long long mid=l+r>>1;
if(solve(n,mid)){// 枚举当前mid为最大值,当满足条件,就往右找最小的。
r=mid;
ans=mid;
}
else l=mid+1;
}
cout<<ans<<endl;
system("pause");
return 0;
}
查看7道真题和解析