1. 程式人生 > >HDU1969 PIE 二分查詢

HDU1969 PIE 二分查詢

題目連結: http://acm.hdu.edu.cn/showproblem.php?pid=1969

題目意思:有n個塊餅和M+1個人要分餅,且每人一塊,餅不能拼接,要求每人分得的最大的餅的面積
思路:二分,先用總的餅的面積 / 人數 = 理論上最大面積,取為上界high,再求一個mid ,一直到迴圈退出,不能在中途找到時結束迴圈

if(餅能分成M+1份)

{   left = mid }   

else  { right = mid }

#include<cstring>
#include<string>
#include<fstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<stack>
#include<ctime>
#include<cstdlib>
#include<functional>
#include<cmath>
using namespace std;
#define PI acos(-1.0)
#define MAXN 100005
#define eps 1e-7
#define INF 0x7FFFFFFF
#define ff sqrt(5.0)
double val[100005];
int n,m,t;
int check(double x)
{
    int sum=0;
    for(int i = 0;i < n;i++)
    {
        sum += val[i] / x;
    }
    if(sum >= m + 1) return 1;
    else return 0;


}
double mid,r,l,maxval;

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        maxval = 0;
        for(int i = 0;i < n; i++)
        {

            scanf("%lf",&val[i]);
            val[i] = val[i] * val[i] * PI;
            maxval += val[i];
        }
        mid = maxval / (m + 1);
        r = mid;
        l = 0.0;
        while(r - l > 1e-7)
        {
          if(check(mid))
          {
              l = mid;
          }
          else
          {
              r = mid;
          }
          mid=(l + r) / 2.0;
        }
        printf("%.4lf\n",mid);
    }
    return 0;

}


相關推薦

HDU1969 PIE 二分查詢

題目連結: http://acm.hdu.edu.cn/showproblem.php?pid=1969 題目意思:有n個塊餅和M+1個人要分餅,且每人一塊,餅不能拼接,要求每人分得的最大的餅的面積 思路:二分,先用總的餅的面積 / 人數 = 理論上最大面積,取為上界hig

hdu1969二分查詢

Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2735    Accepted Submissio

【hoj】2651 pie 二分查詢

二分查詢是一個很基本的演算法,針對的是有序的數列,通過中間值的大小來判斷接下來查詢的是左半段還是右半段,直到中間值的大小等於要找到的數時或者中間值滿足一定的條件就返回,所以當有些問題要求在一定範圍內找到一個滿足一些約束的值時就可以用二分查詢,時間複雜度O(log n);

HDU pie (二分查詢)

Problem DescriptionMy birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N of them, of various tastes and of v

二分查詢 hdu1969 pie

My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of

二分查詢-POJ 3122-Pie

題目連線:Pie 題目大意: 有N張餅,k個朋友,為了體面,必須把餅切割成大小一樣的k+1塊(包括主人自己),求出每個人能得到的最大餅體積。 前提:每人一塊,餅可以有剩餘 二分去暴力答案,確定下界為0,上界為最大體積的餅(每人一塊,最大可能就是餅的體積都相等,也就是每塊都是最大值

hdu 1969 Pie(貪心+二分查詢)(簡單)

Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5628    Accepted Submissio

hdu1969 pie二分

Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6564    Accepted Submission(

hdu 1969 Pie二分查詢

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1969 Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others

hdu1969---Pie

gif class amp 區間 tips return space one sin tips:   1.二分答案和二分查找還是有區別   2.條件判斷和區間LR的改變是有關系的   3.二分答案的精度和區間LR的偏移量有關   4.上一道題的條件轉換 最後一個滿足C--

C語言經典演算法(九)——遞迴實現二分查詢的兩種方法

後繼續整理演算法並寫出自己的理解和備註。 C++實現的:遞迴實現二分查詢演算法 1、 遞迴實現二分查詢 <1> 題目描述:針對資料,進行二分查詢(要求:資料的排列有序) <2> 方法一:概念法 <3> 方法二:遞迴法 原始碼: 一、 遞迴實現

為什麼使用二分查詢的速率要比按其他比例分割的查詢速率要快???

在說任意比例分割查詢之前我們先來談談黃金分割查詢與二分查詢: 在二分查詢中,我們是取中旬等於左向右和的中間值,即用等分的方法進行查詢。 那為什麼一定要等分吶?能不能進行“黃金分割”?也就是中間=左+ 0.618(右 - 左),當然中間要取整數。 我們來分析一下,假設有一段

複雜的二分查詢

1.解決上一篇的問題 問題並不難,首先要求的記憶體是小於100M,1000萬的資料每個資料八個位元組,全部存入陣列佔用的記憶體大概也是80M,所以完全可以使用二分查詢來實現。 2.複雜的二分查詢 簡單的二分查詢我們都會,我們的假設也是陣列中沒有相同元素,假設陣列中有相同的元素,查詢第一個

(java)leetcode852 山脈陣列的封頂索引(二分查詢法找出陣列中最大值的下標)(Peak Index in a Mountain Array)

題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A

【51Nod - 1094】和為k的連續區間 (字首和,二分查詢

題幹: 一整數數列a1, a2, ... , an(有正有負),以及另一個整數k,求一個區間i,ji,j,(1 <= i <= j <= n),使得aii + ... + ajj = k。 Input 第1行:2個數N,K。N為數列的長度。K為需

在algorithm中的二分查詢

首先寫algorithm 的標頭檔案 lower_bound upper_bound binary_search 從小到大 函式lower_bound()在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第一個元素位置。如果所有元素都小於val,則返回last的位

氣泡排序、選擇排序、二分查詢、插入排序

氣泡排序、選擇排序、二分查詢、插入排序 氣泡排序   氣泡排序的思想就是兩兩比較,按從小到大輸出的話,兩個值相比,較小的放前大的放後,那麼第一次兩兩比較結束後,最大值放在末尾,接下來再繼續兩兩比較,但是這一次不需要比較到最後,因為最後已經是最大值了,所以每次兩兩比較結束後,都會少比一次,

Day2二分查詢

書上的二分查詢是定義了一個有序陣列,然後二分查詢返回一個bool型別,我這裡寫的是隨便輸入一個數組,二分查詢,找到了返回位置,找不到輸出“找不到” package bbb; import java.util.Scanner; public class Binary { pub

對標準庫stdlib.h中二分查詢的理解

前幾天面試的時候遇到了這個問題 ,標準庫下提供的二分查詢改錯,當時沒有改出來,寫得不好,回來查了下,這個函式的原型是: /* bsearch() and qsort() are declared both here, in <stdlib.h>, and in * non-AN

演算法圖解中的二分查詢

對於一種有序的元素列表,很多人的第一反應會是將元素一個一個的進行查詢形成簡單查詢 二分查詢是針對有序元素列表進行的查詢性演算法,舉例說明,如果1-100數字,二分查詢就是對半進行,判斷數字在1-50還是51-100,如果在1-50範圍內,在1-25和26-50進行查詢判斷。 使用python