浮点---二分
Posted accepting
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浮点---二分相关的知识,希望对你有一定的参考价值。
浮点二分与整数二分有几分不同,首先是while循环上,浮点二分的while循环,循环条件时while(r-l>=esp)。
其中esp是精度,mid=(r+l)/2。。。 r 和 l 移动的方式也不一样,l=mid,使mid增大,r=mid,使mid减小。
即code:
while(r-l>=esp){ double mid=(r+l)/2; if(check(mid)){ l=mid; ans=mid; } else r=mid; }
例题:
poj3122
注意输入用%lf,输出用%f.
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const double PI=3.14159265359; const int N=1E4+7; double arr[N]; double esp=1e-5; int n,f;//n个蛋糕,分成f份。 int check(double x){ int sum=0; for(int i=1;i<=n;i++){ sum+=int (arr[i]/x); } if(sum>=f) return 1; return 0; } void solve(){ scanf("%d%d",&n,&f); f++; double c=N; double r=0; for(int i=1;i<=n;i++){ scanf("%lf",&arr[i]); arr[i]=arr[i]*arr[i]; r+=arr[i]; } double l=0,ans=0; while(r-l>=esp){ double mid=(r+l)/2; int c=check(mid); if(c==1){ l=mid; ans=mid; } else r=mid; } printf("%.4f ",ans*PI); } int main() { int t; scanf("%d",&t); while(t--) solve(); return 0; }
以上是关于浮点---二分的主要内容,如果未能解决你的问题,请参考以下文章