lightoj1284(数学概率与期望)

本文探讨了一个关于三维空间中灯开关操作的问题。通过数学分析和编程实现,计算了随机选择两点并切换两点间所有灯的状态后,经过多次操作后开着的灯的期望数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

在一个三维的空间,每个点都有一盏灯,开始全是关的.

现在每次随机选两个点,把两个点之间的全部点,开关都按一遍;

问k次过后开着的灯的期望数量;


思路:

一个点如果被包到所选空间里,那么说明我们选的两个点,横坐标在这个点两侧,纵坐标在这个点两侧,高坐标在这个点两侧;

根据这个,我们可以求出每一个操作,这个点被包进去的概率;

然后用等比数列求和公式,推导出被包进去奇数次的概率;

然后把每个点算出来的概率加起来:


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;

int x,y,z,n;
double total;
double cul(int a, int b) {
	//求在某一维,两个点不在同一侧的概率
	return  1.0 - 1.0 * ((a - 1) * (a - 1) +  (b - a) * (b - a)) / (b * b); 
}

int main() {
	int t;
	int cas = 1;
	scanf("%d",&t);
	while(t--) {
		double ans = 0.0;
		scanf("%d%d%d%d", &x,&y,&z,&n);
		total = 1.0 * x * y * z * x * y * z;
		for(int i = 1; i <= x; i++)
			for(int j = 1; j <= y; j++)
				for(int k = 1; k <= z; k++) {
					double p = cul(i,x) * cul(j,y) * cul(k,z);//被覆盖的概率
					ans += 0.5 - 0.5 * pow(1 - 2 *  p, 1.0 * n);//被覆盖奇数次的概率
				}
		printf("Case %d: %.10lf\n",cas++, ans);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值