#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<stack>
#define ll long long
#define N 0x3f3f3f
using namespace std;
int a[100010];
int main()
{
ll n,x;
scanf("%lld %lld",&n,&x);
double ans=x;
for(ll i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(ll i=0;i<n;i++)
{
if(a[i]>ans)
{
ans+=a[i];
ans=ans/2;
}
}
printf("%.3lf",ans);
return 0;
}
B
思路:贝叶斯定理
已经知道第一天穿女装了,那么选取两个箱子的概率就不是1:1
ans=p(两次都取到女装)/p(第一次取到女装)
p(两次都取到女装)=(1/2)*[(x*(x-1))/(n*(n-1)) + (y*(y-1))/(m*(m-1)) ]
p(第一次取到女装)=(1/2)*[x/n + y/m]
long long 暴力求分子和分母化简就好
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<stack>
#define ll long long
#define N 0x3f3f3f
using namespace std;
int main()
{
ll n,m,x,y,t;
cin>>n>>m>>x>>y>>t;
ll xx=x*(x-1)*m*(m-1)+y*(y-1)*n*(n-1);
ll yy=(x*m+y*n)*(n-1)*(m-1);
//cout<<xx<<endl;
ll c=__gcd(xx,yy);
if(t==0)
{
if(xx==yy)
cout<<"1.000"<<endl;
else if(xx==0)
{
cout<<"0.000"<<endl;
}
else
{
double h=(double)xx/yy;
printf("%.3lf",h);
}
}
else
{
if(xx==yy)
cout<<"1/1"<<endl;
else if(xx==0)
{
cout<<"0/1"<<endl;
}
else
cout<<xx/c<<"/"<<yy/c<<endl;
}
return 0;
}