J. Pie 典型的二分求解

來源:互聯網
上載者:User

 

J. Pie

我的生日來臨,通常會用餡餅招待客人。是N個大小不同,口味不同的餡餅。我有F個朋友,他們會來參加我的生日宴會,他們每個人都會從某一塊餅中分到一部分,而不是從某幾塊餅中各自分一部分(這麼做會顯得很亂的!)。我們每個人得到的都是同樣大小的餅(形狀可以不同),所有的餡餅都是圓柱形的,它們有同樣的高度,但是半徑可以是不一樣的。我們所能得到的最大的餡餅尺寸是多少?

Input

一行包括一正整數:測試組數。接下來是每組資料說明:

l        一行有2個整數N和F(1≤N,F≤10 000),分別是餡餅和朋友的數量。

l        一行有N個整數ri(1≤ri≤10 000),分別表示N個餡餅的半徑。

Output

對每組測試,輸出一行,表示我和我的朋友所能達到的最大的餡餅尺寸(保留小數6位)。

Sample input

Sample output

3

3 3

4 3 3

1 24

5

10 5

1 4 2 3 4 5 6 5 4 2

25.132741

3.141593

50.265482

 

#include<stdio.h>#include<math.h>const double pi=acos(-1);    //對於pi這個來講以後切記用這個來賦值double  a[11000];int main(){    int x,ji;        scanf("%d",&x);    while(x--)    {       int i,n,f;       scanf("%d %d",&n,&f);       f+=1;       double sum=0,max,min,middle;       for(i=1;i<=n;i++)                 {             scanf("%lf",&a[i]);             a[i]=a[i]*a[i];             sum+=a[i];                                    }       max=sum/f;   //確定最大值       min=0;       while(max-min>0.00000001)     當兩者的差距做夠小時 middle ,max,min的值就都一樣了       {          ji=0;          middle=(max+min)/2;          for(i=1; i<=n; i++)          {            ji+=(int)(a[i]/middle);                   }          if(ji>=f)min=middle;   //這是典型的二分的條件            if(ji<f)max=middle;                                                    }              printf("%.6lf\n",pi*middle);    } }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.