LigthOJ1284-Lights inside 3D Grid

题意:在一个长宽高为XYZ的长方体中所有的灯都是关着的,一次操作为任选两个格子,以这两个格子为顶点的长方体所包括的所有格子上的灯状态都会改变,关的会被打开,开的会被关掉,给定XYZ的值,现在进行K次操作,问开着的灯的期望个数

思路:求出每个格子经过K次操作后灯是开着的期望值,然后把所有的格子的期望值加起来就是总期望值

对于每个格子,把XYZ的值分开考虑,因为XYZ是分别独立的,如果在一次操作中这个格子的灯状态改变了,那么选中的两个顶点一定在这个格子的两边,否则这个格子不会被选到的长方体覆盖到,设该点坐标为(x0,y0,z0),那么满足x1<=x0<=x2,y1<=y0<=y2,z1<=z0<=z2,

所以该点被覆盖的概率P=( 2*(x0+1)*(X-x0) - 1 ) * ( 2*(y0+1)*(Y-y0) - 1 ) * ( 2*(z0+1)*(Z-z0) - 1 ) / ( X*X*Y*Y*Z*Z )

    因为灯的初始状态是关,所以被操作奇数次的格子灯的状态为开,所以在k次操作中,事件发生奇数次的期望E

这是二项展开式( p + (1-p) ) ^ k = 1 的奇数项,令 ( -p + (1-p) ) ^ k,则E  = (1 - ( -p + (1-p) ) ^ k) / 2.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
int main () {
	int t;
	scanf ( "%d", &t );
	for ( int cas = 1; cas <= t; cas++ ) {
		int X,Y,Z,k;
		scanf ( "%d%d%d%d", &X, &Y, &Z, &k );
		double ans = 0.0;
		double all = 1.0*X*X*Y*Y*Z*Z;
		for ( int x = 0; x < X; x++ ) {
			for ( int y = 0; y < Y; y++ ) {
				for ( int z = 0; z < Z; z++ ) {
					double p = (2.0 * (x+1) * (X-x) - 1) * (2.0 * (y+1) * (Y-y) - 1) * (2.0 * (z+1) * (Z-z) - 1) / all;
					double temp = ( 1 - pow(1-2*p,1.0*k) ) / 2.0;
					ans += temp;
				}
			}
		}
		printf ( "Case %d: %lf\n", cas, ans );
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cd C:\Program Files\FlightGear fgfs --fg-root=C:\Program Files\FlightGear\data --aircraft=ufo --in-air --fdm=null --telnet=5501 --telnet=5502 --telnet=5503 --disable-ai-traffic --disable-real-weather-fetch --disable-random-objects --disable-terrasync --disable-clouds --disable-sound --disable-panel --disable-hud --disable-specular-highlight --timeofday=noon --prop:/sim/rendering/multi-sample-buffers=1 --prop:/sim/rendering/multi-samples=2 --prop:/sim/rendering/draw-mask-clouds=false --prop:/sim/rendering/draw-mask-terrain=true --prop:/sim/rendering/draw-mask-objects=true --prop:/sim/rendering/draw-mask-lights=true --prop:/sim/rendering/draw-mask-internal=true --prop:/sim/rendering/draw-mask-cockpit=true --prop:/sim/rendering/draw-mask-effects=true --prop:/sim/rendering/draw-mask-overlay=true --prop:/sim/rendering/draw-mask-world=true --prop:/sim/rendering/draw-mask-panel=true --prop:/sim/rendering/draw-mask-vr=true --prop:/sim/rendering/draw-mask-2d=true --prop:/sim/rendering/draw-mask-3d=true --prop:/sim/rendering/draw-mask-sky=true --prop:/sim/rendering/draw-mask-shadows=true --prop:/sim/rendering/draw-mask-cabin=true --prop:/sim/rendering/draw-mask-weather=true --prop:/sim/rendering/draw-mask-stereo=true --prop:/sim/rendering/draw-mask-internal-cockpit=true --prop:/sim/rendering/draw-mask-internal-windows=true --prop:/sim/rendering/draw-mask-internal-instruments=true --prop:/sim/rendering/draw-mask-internal-overlay=true --prop:/sim/rendering/draw-mask-internal-effects=true --prop:/sim/rendering/draw-mask-internal-lights=true --prop:/sim/rendering/draw-mask-internal-world=true --prop:/sim/rendering/draw-mask-internal-panel=true --prop:/sim/rendering/draw-mask-internal-3d=true --prop:/sim/rendering/draw-mask-internal-sky=true --prop:/sim/rendering/draw-mask-internal-cabin=true --prop:/sim/rendering/draw-mask-internal-weather=true --prop:/sim/rendering/draw-mask-internal-stereo=true --prop:/sim/rendering/draw-mask-internal-shadow=true --prop:/sim/rendering/draw-mask-internal-stall=true --prop:/sim/rendering/draw-mask-internal-aoa=true --prop:/sim/rendering/draw-mask-internal-thermal=false --prop:/sim/rendering/draw-mask-internal-ice=false --prop:/sim/rendering/draw-mask-internal-glass=true --prop:/sim/rendering/draw-mask-internal-dead=true --prop:/sim/rendering/draw-mask-internal-reflection=true --telnet=127.0.0.1:5501 --disable-panel --disable-hud --disable-specular-highlight --disable-clouds --disable-sound --timeofday=noon --enable-hud-3d=no --enable-hud-2d=yes --enable-panel=no --enable-sound=no程序显示错误
05-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值