题意:
给定n和A,根据题目公式推出最小的B。
思路:
推公式,
H1=A
H3=H2∗2+2−H1
H4=H3∗2+2−H2
…..
Hn=Hn−1∗2+2−Hn−2。
这样以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;
}
本文介绍了一种通过推导公式并使用二分查找的方法来求解给定n和A时,最小的B值的问题。
1709

被折叠的 条评论
为什么被折叠?



