POJ 1759(二分

题意还是需要看原题,不好描述。

实际上这个题只需要注意一点,就是把关系式改成递推式,然后就可以发现第二项完全决定了后面的位置,所以二分第二项的高度即可。

import java.util.*;
import java.io.*;
import java.math.*;

public class Main {
    public static final int maxv = 200005;
    public static final int shift = 100000;
    static int N;
    static double A;

    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(new File(
                "/home/develop/eclipse_file/ACMproject/src/in"));
        // Scanner in=new Scanner(System.in);
        N=in.nextInt();
        A=in.nextDouble();
        double l=A,r=0;
        double ansl=1e10,ansl2=0;
        while(Math.abs(ansl-ansl2)>0.001){
            double mid=(l+r)/2;
            double res=check(mid);
            if(res>0){
                l=mid;
                ansl2=ansl;
                ansl=res;
            }else{
                r=mid;
            }
        }
        System.out.printf("%.2f\n",ansl);
        in.close();
    }
    static double check(double a2){
        double now=0;
        double a1=A;
        int i;
        for(i=3;i<=N;i++){
            now=2*a2-a1+2;
            a1=a2;
            a2=now;
            if(now<0) return -1;
        }
        return now;
    }
}

时间: 2024-12-20 00:59:34

POJ 1759(二分的相关文章

POJ 1759 Garland(二分+数学递归+坑精度)

POJ 1759 Garland  这个题wa了27次,忘了用一个数来储存f[n-1],每次由于二分都会改变f[n-1]的值,得到的有的值不精确,直接输出f[n-1]肯定有问题. 这个题用c++交可以过,g++交过不了, f[i]=2+2*f[i-1]-f[i-2]; f[0]=A,f[1]=x; 二分枚举x的值,最终得到B的值(不是f[n-1]), 上述递推式是非齐次的二阶递推式,解其齐次特征方程,可以得到f[n-1]的齐次时的表达式,对于非齐次的,目前我还没法求出通式, B与f[n-1]的关

POJ 3525 二分+半平面交

Most Distant Point from the Sea Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3812   Accepted: 1779   Special Judge Description The main land of Japan called Honshu is an island surrounded by the sea. In such an island, it is natural t

POJ 1759 Garland(二分答案)

[题目链接] http://poj.org/problem?id=1759 [题目大意] 有n个数字H,H[i]=(H[i-1]+H[i+1])/2-1,已知H[1],求最大H[n], 使得所有的H均大于0. [题解] 我们得到递推式子H[i]=2*H[i-1]+2-H[i-2],发现H[n]和H[2]成正相关 所以我们只要二分H[2]的取值,同时计算每个H是否大于等于0即可. [代码] #include <cstdio> int n; double H[1010],A,B; bool che

POJ 1064 (二分)

题目链接: http://poj.org/problem?id=1064 题目大意:一堆棍子可以截取,问要求最后给出K根等长棍子,求每根棍子的最大长度.保留2位小数.如果小于0.01,则输出0.00 解题思路: 根据最长的棍子二分枚举切割长度. 这点很容易想到. 本题麻烦的地方在于小数的二分. 由于精度丢失问题,如果直接使用double进行二分,那么二分确定的最大长度必然是不精确的. 如:只有1根100.0的棍子,分成10段.如果使用double二分,那么就算把精度控制到0.0000001, 最

poj 1759 Garland

Garland Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2365   Accepted: 1007 Description The New Year garland consists of N lamps attached to a common wire that hangs down on the ends to which outermost lamps are affixed. The wire sags

POJ 3122-Pie(二分+精度)

题目地址:POJ 3122 题意:给出n个pie的直径.有F+1个人,假设给每人分的大小同样(形状能够不同),每一个人能够分多少.要求是分出来的每一份必须出自同一个pi(既当pie大小为3.2,1,仅仅能分出两个大小为2的份,剩下两个要扔掉.) 思路:对每个人分的大小进行二分. 注意讲pi放在最后成.能够提高精度. Ps:wa了5发.不知道错在哪,然后把输出的%lf改成%f就A了,并不知道为什么...sad #include <stdio.h> #include <math.h>

POJ 3061 (二分+前缀和)

题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点慢. 二分枚举序列长度,如果可行,向左找小的,否则向右找大的. 前缀和预处理之后,可以O(1)内求和. #include "cstdio" #include "cstring" int sum[100005],n,s,a,T; bool check(int x) { i

poj 3122 (二分查找)

链接:poj 3122 题意:我生日派对时,准备了n个圆柱形的pie,半径比一定相同,但高都为1, 邀请了f个朋友,加上自己一共f+1人,需要将n个pie分给f+1个人 要求:每个人分得的pie尺寸要一样大, 并且同一个人所分的pie要是从同一个pie上得到的,n个pie分完后可以有剩余 求:每个人最多可以分多少 分析:因为同一个人所分的pie都来自同一个pie, 若每个人所分的最大体积为a,那么比a小的pie肯定得舍弃. 将每个人最多分得的pie看成半径为r的圆柱,则最大尺寸为PI*r*r*1

poj 1905 (二分查找)

链接:poj 1905 截取自某大牛的blog,详情请关注:链接:Enumz 题意:一根两端固定在两面墙上的杆长度为L,受热弯曲后变弯曲, 长度L′=(1+nc)*L,求前后两个状态的杆的中点位置的距离 分析:设L′对应的半径为r,弧长为2α,要求的距离为x 根据直角三角形的性质可得: 根据弧长公式L′=2αr可得 有勾股定理得出: 代入得: 其为单调函数,二分求解即可. PS:卡精度 特判若输入存在0,则直接输出0.000 #include<stdio.h> #include<math