• 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
  • 相关阅读:
    C语言移动一个点
    C语言数据结构无向图
    C语言学生管理系统(C语言课程设计/精简版)
    C语言贪吃蛇
    2017蓝桥杯九宫幻方(C++B组)
    2017蓝桥杯Excel地址(C++C组)
    2017蓝桥杯杨辉三角(C++C组)
    2017蓝桥杯算式900(C++C组)
    2017蓝桥杯兴趣小组(C++C组)
    javascript 的默认对象
  • 原文地址:https://www.cnblogs.com/csushl/p/10828658.html
Copyright © 2020-2023  润新知