uva 12097(二分)

就是二分

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const double pi=acos(-1.0);
const int maxn=10000+100;
int t,n,f;
double a[maxn];
const double esp=1e-5;
bool is_ok(double ss)
{
    int ans=0;
    for(int i=1;i<=n;i++)
      ans+=floor(a[i]/ss);
    if(ans<f+1) return 1;
    else return 0;
}
int main()
{
   scanf("%d",&t);
   while(t--)
   {
       scanf("%d%d",&n,&f);
       double r,maxi=0;
       for(int i=1;i<=n;i++)
       {
           scanf("%lf",&r);
            a[i]=pi*r*r;
          maxi=max(maxi,a[i]);
       }
       double l=0;
       r=maxi;
       while(r-l>esp)
       {
             double mid=(l+r)/2.0;
          if(is_ok(mid)) r=mid;
          else l=mid;
       }
       printf("%.4lf\n",l);
   }
    return 0;
}
时间: 2024-09-30 00:28:20

uva 12097(二分)的相关文章

uva 12097 Pie(二分搜索)

uva 12097 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 my friends are coming to my party and each of them gets a piece of pie. This shoul

UVa 1475 (二分+半平面交) Jungle Outpost

题意: 有n个瞭望塔构成一个凸n边形,敌人会炸毁一些瞭望台,剩下的瞭望台构成新的凸包.在凸多边形内部选择一个点作为总部,使得敌人需要炸毁的瞭望塔最多才能使总部暴露出来.输出敌人需要炸毁的数目. 分析: 在炸毁同样数量的瞭望塔时,如何爆破才能使暴露出的面积最大.那就是集中火力炸掉连续的几个瞭望塔.直觉上是这样的,我不会证明这个结论.因为是连续爆破,所以k次爆破后还保留的部分就是一个半平面,枚举这k个爆破点,如果这些半平面交非空则总部可以设在这里. k值是通过二分来确定的,下界是1,上界是n-3(这

UVa 714 (二分) Copying Books

首先通过二分来确定这种最大值最小的问题. 假设每个区间的和的最大值为x,那么只要判断的时候只要贪心即可. 也就是如果和不超过x就一直往区间里放数,否则就开辟一个新的区间,这样来判断是否k个区间容得下这些数. 还有就是输出也挺麻烦的,借鉴了一下lrj的代码,感觉也是十分巧妙. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef long long LL; 5 const int maxn = 500 + 10; 6 LL a

UVA 10341 (二分查找+精度)

题意: 给你一个关于x的方程,给出变量的值,求出x: Problem F Solve It Input:standard input Output:standard output Time Limit: 1 second Memory Limit: 32 MB Solve the equation: p*e-x+ q*sin(x) + r*cos(x) +s*tan(x) +t*x2 + u = 0 where 0 <= x <= 1. Input Input consists of mult

UVa 1607 (二分) Gates

这道题真的有点“神”啊.= ̄ω ̄= 因为输入都是x,所以整个电路的功能一共就四种:0, 1, x,!x 所以就确定了这样一个事实:如果电路的输出是常数,那么所有的输入都可以优化成常数. 否则,只需要将一个输入变为变量即可,其他的全部为常数. 从00...0到11...1,在1的数量增多的过程中一定有一个位置,使得output(k) = output(n), output(k-1) = output(0).output(k)表示前面有k个1,有n-k个0. 那么将第k为设为变量即可,k前面输出0,

uva 12097

题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=42065 #include <cstdio> #include <cmath> using namespace std; const double PI = acos(-1); double v[10005]; int N, F; bool test(double x) { int tot = 0; for(int i=0; i<N; i++) {

UVa 10341 (二分求根) Solve It

很水的一道题,因为你发现这个函数是单调递减的,所以二分法求出函数的根即可. 1 #include <cstdio> 2 #include <cmath> 3 //using namespace std; 4 5 const double e = 1e-14; 6 double p, q, r, s, t, u; 7 8 inline double f(double x) 9 { return p*exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) +

UVA 714 二分最大化最小值

题意:输入t表示有多个样例,输入n,group表示有n个数分为group组使每组和最小 #include<iostream> #include<string.h> using namespace std; #define ll long long const int N = 500 + 5; ll a[N]; int vis[N]; ll num,m,group; int solve(int d) { ll sum=0; int k=1; for(int i=0;i<num;

训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分)

layout: post title: 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分) author: "luowentaoaa" catalog: true mathjax: true tags: - 最小生成树 - 图论 - 训练指南 Stream My Contest UVA - 11865 二分带宽,然后判断最小生成树是否小于cost值. #include<bits/stdc++.h> using namespace std; typede