zoukankan      html  css  js  c++  java
  • LightOJ1284 Lights inside 3D Grid (概率DP)

    You are given a 3D grid, which has dimensions XY and Z. Each of the X x Y x Z cells contains a light. Initially all lights are off. You will have K turns. In each of the K turns,

    1. You select a cell A randomly from the grid,
    2. You select a cell B randomly from the grid and
    3. Toggle the states of all the bulbs bounded by cell A and cell B, i.e. make all the ON lights OFF and make all the OFF lights ON which are bounded by A and B. To be clear, consider cell A is (x1, y1, z1) and cell B is (x2, y2, z2). Then you have to toggle all the bulbs in grid cell (x, y, z) where min(x1, x2) ≤ x ≤ max(x1, x2)min(y1, y2) ≤ y ≤ max(y1, y2) and min(z1, z2) ≤ z ≤ max(z1, z2).

    Your task is to find the expected number of lights to be ON after K turns.

    Input

    Input starts with an integer T (≤ 50), denoting the number of test cases.

    Each case starts with a line containing four integers X, Y, Z (1 ≤ X, Y, Z ≤ 100) and K (0 ≤ K ≤ 10000).

    Output

    For each case, print the case number and the expected number of lights that are ON after K turns. Errors less than 10-6will be ignored.

    Sample Input

    5

    1 2 3 5

    1 1 1 1

    1 2 3 0

    2 3 4 1

    2 3 4 2

    Sample Output

    Case 1: 2.9998713992

    Case 2: 1

    Case 3: 0

    Case 4: 6.375

    Case 5: 9.09765625

    题解:

    参考代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int T,X,Y,Z,K;
    double ans;
    
    double calc(int x,int m)
    {
        return 1.0-1.0*((m-x)*(m-x)+(x-1)*(x-1))/(m*m);
    }
    
    int main()
    {
        scanf("%d",&T);
        for(int cas=1;cas<=T;++cas)
        {
            ans=0;
            scanf("%d%d%d%d",&X,&Y,&Z,&K);
            for(int i=1;i<=X;++i)
                for(int j=1;j<=Y;++j)
                    for(int k=1;k<=Z;++k)
                    {
                        double p=calc(i,X)*calc(j,Y)*calc(k,Z);
                        ans+=0.5-0.5*pow(1.0-2*p,K);
                    }
            printf("Case %d: %.8lf
    ",cas,ans);
        } 
        
        return 0; 
    }
    View Code
  • 相关阅读:

    IT人的素质 & 设计杂谈
    结构化思维思维的结构
    [WM].NET CF下如何提高应用程序的性能 【转载】
    无题
    [WM]谁抢走了应用程序的性能? 【转载】
    繁体编码文本文件转换为简体编码的工具
    生成VB多行字符串常量的工具
    跟我一步一步开发自己的Openfire插件
    cnblogs博文浏览[推荐、Top、评论、关注、收藏]利器代码片段
  • 原文地址:https://www.cnblogs.com/csushl/p/10828658.html
Copyright © 2011-2022 走看看