二分穷竭搜索,像这种f(x)随x变化的问题,就用这种方法,其实。。。。。我也不大懂,这里错的原因就是精度问题,加个0.005就可以了,比较简单,虽然我错了n次
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=1e5+10; int n,k; int res; int a[maxn]; bool cc(int d) { int sum=0; for(int i=0;i<n;i++) sum+=a[i]/d; return sum>=k; } int main() { res=0; scanf("%d%d",&n,&k); int maxi=0; for(int i=0;i<n;i++) { double m; scanf("%lf",&m); a[i]=(m+0.005)*100; maxi=max(maxi,a[i]); } long long int l=1,r=maxi; while(l<=r) { int mid=(l+r)/2; if(cc(mid)) { res=max(res,mid); l=mid+1; } else r=mid-1; } printf("%.2f\n",res*0.01); return 0; }
转载于:https://www.cnblogs.com/Wangwanxiang/p/6694423.html
相关资源:数据结构—成绩单生成器