D - Cable master POJ - 1064 #include<stdio.h> #include<cmath> #include<iostream> using namespace std; #define LL long long int main() { int n,k; double m; scanf("%d%d",&n,&k); int num[10010]; for(int i=1; i<=n; i++) { scanf("%lf",&m); num[i]=m*100; } LL maxn=0; for(int i=1; i<=n; i++) { if(num[i]>maxn) { maxn=num[i]; } } int left=1,right=maxn+1,mid;//left一定要是1.为0会编译错误 int ans=0; while(left<=right) { int cnt=0; mid=left+(right-left)/2;//防止超出范围 for(int i=1; i<=n; i++) { cnt+=num[i]/mid; } if(cnt>=k) { left=mid+1; ans=max(mid,ans); } else { right=mid-1; } } printf("%.2lf\n",(ans*1.0)/100); } 第一次写二分查找的题目。这道题用G++交会错误,好迷呀~~~~