[Gym 102135][B - Freebie]2017-2018 8th BSUIR Open Programming Contest

description

就是生日悖论的改造

周六周日生日的推迟到周一去举行,现在有n人(n<=200)在今年过生日

问2019年有多少天(期望) 有至少两个人一起过生日

已知2019.1.1在周二,排除2.29生日情况

solution

假如你没有把期望看成概率的话,这题还是可以解的,当然,概率也是能解的,但这不是题目要求,求不说了

别问为什么会从期望想到概率……

我们将周六日一三天期望单独求,然后求其余4天的期望

正难则反,我们求出某个星期的这三天都不发生生日冲突的情况,概率就是 p = ( 362 365 ) n + C n 1 ∗ 3 365 ( 362 365 ) n − 1 p=(\dfrac{362}{365})^n+C_{n}^{1}*\dfrac{3}{365}(\dfrac{362}{365})^{n-1} p=(365362)n+Cn13653(365362)n1,然后1-p就是冲突的概率了

由于有52个这样的星期,因此期望就是52*(1-p)

至于其余四天的期望也和这个类似,不复赘述。 p = ( 364 365 ) n + C n 1 ∗ 1 365 ( 364 365 ) n − 1 p=(\dfrac{364}{365})^n+C_{n}^{1}*\dfrac{1}{365}(\dfrac{364}{365})^{n-1} p=(365364)n+Cn13651(365364)n1

code


#include
#define max(a,b) ((a>b)?a:b)
#define min(a,b) ((a
#define fo(i,a,b) for(LL i=a;i<=b;i++)
#define rp(i,a,b) for(LL i=a;i>=b;i--)
#define tr(t,x) for(LL t=first[x];t;t=nex[t])
#define LL long long
#define db double
using namespace std; 
const LL N=300;
int n,m,i,t,j,k,l,r;
db p,q;
int main(){
	//freopen("data.in","r",stdin);
	scanf("%d",&n);
	p=q=1;
	fo(i,1,n-1) p*=362/365.0;
	p*=(362+3*n)/365.0;
	p=1-p;
	fo(i,1,n-1) q*=364/365.0;
	q*=(364+n)/365.0;
	q=1-q;
	printf("%.12lf\n",52*p+209*q);
}

你可能感兴趣的:(icpc,概率,期望)