标签:i++ 公式 return 条件 style hat des nsis htm
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 2365 | Accepted: 1007 |
Description
Input
Output
Sample Input
692 532.81
Sample Output
446113.34
Source
/* * @Author: Lyucheng * @Date: 2017-07-25 10:07:16 * @Last Modified by: Lyucheng * @Last Modified time: 2017-07-29 19:25:29 */ /* 题意:有一串项链,给出第一个珠子的位置,然后保证每个珠子不能掉到地上,也就是说高度必须大于等于零,让你求最后一个珠子的位置 思路:二分答案就可以,判断条件可以推出公式 H1=A H2=A/2 + H3/2 - 1 H3=A/3 + (H4*2)/3 - 2 ... Hn-1=A/(n-1) + (Hn*n-2)/n-1 - (n-2) 然后逆向推过来 错误:上面的公式可能存在损失精度的问题...可是打印了所有答案,真的没错...poj C++能过,但是G++就过不了 改进:H[i] = 2 * H[i - 1] + 2 - H[i - 2]; 还有个问题,用printf输出就不行,用cout输出就可以 */ #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> #include <iomanip> #define MAXL -1 #define MAXR 1000+16 #define MAXN 1000+16 #define EXP 1e-9 using namespace std; int n; double A,B; double F[MAXN]; bool ok(const double &x){ F[2]=x; for(int i=3;i<=n;i++){ F[i]=2*F[i-1]+2-F[i-2]; if(F[i]<0) return false; } B=F[n]; return true; } int main(){ // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); cin>>n>>A; F[1]=A; double l=MAXL,r=MAXR,mid; for(int i=0;i<100;i++){ mid=(l+r)/2.0; if(ok(mid)==true){ r=mid; }else{ l=mid; } } cout << fixed << setprecision(2) << B << endl; return 0; }
标签:i++ 公式 return 条件 style hat des nsis htm
原文地址:http://www.cnblogs.com/wuwangchuxin0924/p/7257219.html