uva11605 - Lights inside a 3d Grid

本文解析了一个三维长方体中,每个格子在特定次数后开着灯的期望概率问题。通过计算每个格子被选中的概率及开着灯的概率,最终得出整体的期望值。涉及概率论、组合数学及算法实现。

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

链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2652

题解

每个格子对答案的贡献都是独立的,因此我可以对每个格子的期望都算一遍然后加起来
对于在 ( i , j , k ) (i,j,k) (i,j,k)的格子
它每次被选中的概率都是
p ( i , j , k ) = ( 2 i ( n − i + 1 ) − 1 ) ( 2 j ( m − j + 1 ) − 1 ) ( 2 k ( q − k + 1 ) − 1 ) ( n m q ) 2 p_{(i,j,k)}=\frac{(2i(n-i+1)-1)(2j(m-j+1)-1)(2k(q-k+1)-1)}{(nmq)^2} p(i,j,k)=(nmq)2(2i(ni+1)1)(2j(mj+1)1)(2k(qk+1)1)
其中 n , m , q n,m,q n,m,q代表长方体的边长
设第 i i i次之后开着灯的概率为 a i a_i ai,那么
a 1 = p a_1=p a1=p
a n = ( 1 − p ) a n − 1 + p ( 1 − a n − 1 ) a_n=(1-p)a_{n-1}+p(1-a_{n-1}) an=(1p)an1+p(1an1)
求得通项公式 a n = ( p − 1 2 ) ( 1 − 2 p ) n − 1 + 1 2 a_n=(p-\frac{1}{2})(1-2p)^{n-1}+\frac{1}{2} an=(p21)(12p)n1+21
所以格子 ( i , j , k ) (i,j,k) (i,j,k)对答案的贡献就是 1 × [ ( p − 1 2 ) ( 1 − 2 p ) K − 1 + 1 2 ] 1\times[(p-\frac{1}{2})(1-2p)^{K-1}+\frac{1}{2}] 1×[(p21)(12p)K1+21]
其中 K K K是题目输入的 K K K

代码

//概率题
#include <bits/stdc++.h>
#define eps 1e-8
using namespace std;
typedef long long ll;
typedef long double ld;
ll n, m, q, K;
ld tot;
ll read(ll x=0)
{
	ll c, f=1;
	for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
	for(;isdigit(c);c=getchar())x=x*10+c-48;
	return f*x;
}
ld solve()
{
	ll i, j, k;
	ld p, ans=0;
	if(K==0)return ld(0);
	for(i=1;i<=n;i++)for(j=1;j<=m;j++)for(k=1;k<=q;k++)
	{
		p = (2*i*(n-i+1)-1)*(2*j*(m-j+1)-1)*(2*k*(q-k+1)-1) / tot;
		ans += (p-0.5)*pow(1.0-2.0*p,K-1)+0.5;
	}
	return ans;
}
int main()
{
	ll T=read(), kase=0;
	while(T--)
	{
		n=read(), m=read(), q=read(), K=read();
		tot = n*m*q*n*m*q;
		printf("Case %lld: %.10Lf\n",++kase,solve());
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值