標籤:二分尋找 hoj algorithm
簡單,二分法,但是在oj上交的時候會有精度的限制,所以只能把數擴得大一點,而且在擴的時候為防止尾數會自動產生一些非零數,所以還是自己吧擴到的位置設定為0,還有輸出時因為%.2lf會自己有4設5入,所以可以自己算出小數點後兩位的數值,在輸出,保證要求的精度
#include <iostream>#include <stdio.h>#include <algorithm>#define MAX 10010using namespace std;long long input[MAX];int m,n;bool cmp(int a,int b){ return a<b;}bool judge(int mid){ int x = 0; for(int i = 0;i < n;i++){ x += input[i] / mid; } if(x >= m) return true; else return false;}int main(){//#ifndef ONLINE_JUDGE // freopen("in.txt","r",stdin);//#endif long long high,low,mid,res; double a; while(cin>>n>>m){ high = 0; low = 0; for(int i = 0;i < n;i++){ cin>>a; input[i] = (a+1e-8)*10000; high = high > input[i]?high : input[i]; } sort(input,input+n,cmp); res = 0; low = 10000/100; while(low <= high){ mid = (low+high)/2; if(judge(mid)){ res = mid; low = mid+1; } else high = mid-1; } int th = res/10000; int hu = (res - th * 10000)/1000; int te = (res - th * 10000 - hu * 1000)/100; printf("%d.%d%d\n",th,hu,te); }}