网线主管(信息学奥赛一本通-T1242)
【題目描述】
仙境的居民們決定舉辦一場程序設計區(qū)域賽。裁判委員會完全由自愿組成,他們承諾要組織一次史上最公正的比賽。他們決定將選手的電腦用星形拓撲結構連接在一起,即將它們全部連到一個單一的中心服務器。為了組織這個完全公正的比賽,裁判委員會主席提出要將所有選手的電腦等距離地圍繞在服務器周圍放置。
為購買網線,裁判委員會聯系了當地的一個網絡解決方案提供商,要求能夠提供一定數量的等長網線。裁判委員會希望網線越長越好,這樣選手們之間的距離可以盡可能遠一些。
該公司的網線主管承接了這個任務。他知道庫存中每條網線的長度(精確到厘米),并且只要告訴他所需的網線長度(精確到厘米),他都能夠完成對網線的切割工作。但是,這次,所需的網線長度并不知道,這讓網線主管不知所措。
你需要編寫一個程序,幫助網線主管確定一個最長的網線長度,并且按此長度對庫存中的網線進行切割,能夠得到指定數量的網線。
【輸入】
第一行包含兩個整數N和K,以單個空格隔開。N(1 ≤ N ≤ 10000)是庫存中的網線數,K(1 ≤ K ≤ 10000)是需要的網線數量。
接下來N行,每行一個數,為庫存中每條網線的長度(單位:米)。所有網線的長度至少1m,至多100km。輸入中的所有長度都精確到厘米,即保留到小數點后兩位。
【輸出】
網線主管能夠從庫存的網線中切出指定數量的網線的最長長度(單位:米)。必須精確到厘米,即保留到小數點后兩位。
若無法得到長度至少為1cm的指定數量的網線,則必須輸出“0.00”(不包含引號)。
【輸入樣例】
4 11
8.02
7.43
4.57
5.39
【輸出樣例】
2.00
【源程序】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<string> #define INF 999999999 #define N 100001 #define MOD 1000000007 #define E 1e-3 using namespace std; int n,k,a[N]; int judge(int x) {int i,ans=0;for(i=1;i<=n;i++)ans+=a[i]/x;return ans>=k; } int main() {double b;int i,j;int left=0,right=0,mid;cin>>n>>k;for(i=1;i<=n;i++){cin>>b;a[i]=(int)(b*100+0.5);if(right<a[i])right=a[i];}right+=1;while(left+1<right){mid=(left+right)/2;if(judge(mid))left=mid;elseright=mid;}printf("%.2lf",left/100.0);return 0; }?
總結
以上是生活随笔為你收集整理的网线主管(信息学奥赛一本通-T1242)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Almost Arithmetic Pr
- 下一篇: 不要62(HDU-2089)