传送门
题目:
大意:
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=3e6+10;
const double pi=acos(-1);
const double eps=1e-10;
double sum;
double dfs(double c,double m,double p,double v,int num,double val){
if(c>eps){//可抽c
double cmp=min(c,v);
if(m>eps)dfs(c-cmp,m+cmp/2,p+cmp/2,v,num+1,val*c);//m存在
else dfs(c-cmp,m,p+cmp,v,num+1,val*c);//m不存在
}
if(m>eps){//可抽m
double cmp=min(m,v);
if(c>eps)dfs(c+cmp/2,m-cmp,p+cmp/2,v,num+1,val*m);//c存在
else dfs(c,m-cmp,p+cmp,v,num+1,val*m);//c不存在
}
sum+=(val*p*num);
// cout<<sum<<endl;
}
int main(){
int t;cin>>t;
while(t--){
double c,m,p,v;
cin>>c>>m>>p>>v;
sum=0;dfs(c,m,p,v,1,1);
printf("%.12lf\n",sum);
}
return 0;
}