簡單,二分法,可是在oj上交的時候會有精度的限制,所以僅僅能把數擴得大一點,并且在擴的時候為防止尾數會自己主動生成一些非零數,所以還是自己吧擴到的位置設置為0,還有輸出時由于%.2lf會自己有4設5入,所以能夠自己算出小數點后兩位的數值,在輸出,保證要求的精度
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define MAX 10010
using 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);
}
}
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

