uva 1555 Garland(二分)

来源:互联网 发布:网络信息平台建设ppt 编辑:程序博客网 时间:2024/05/18 00:21

题意:

给定n和A,根据题目公式推出最小的B。

思路:

推公式,
H1=A
H3=H22+2H1
H4=H32+2H2
…..
Hn=Hn12+2Hn2
这样以H2做未知数。二分枚举H2使得H2满足题目条件。

AC代码:

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;typedef long long ll;const int N = 1e3 + 10;double eps = 1e-8;int n;double A, B, H[N];bool judge(double h2) {    H[2] = h2;    for(int i = 3; i <= n; i++) {        H[i] = H[i-1]*2 + 2 - H[i-2];        if(H[i] < 0) return false;    }    B = H[n];    return true;}int main() {    while(scanf("%d%lf", &n, &A) != EOF) {        H[1] = A;        double L = 0, R = A;        while(R-L > eps) {            double M = (L+R)/2;            if(judge(M)) R = M;            else L = M;        }        printf("%.2lf\n", B);    }    return 0;}
0 0
原创粉丝点击