• LightOJ


    题目链接:https://vjudge.net/problem/LightOJ-1284

    1284 - Lights inside 3D Grid
    Time Limit: 4 second(s) Memory Limit: 32 MB

    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-6 will be ignored.

    Sample Input

    Output for Sample Input

    5

    1 2 3 5

    1 1 1 1

    1 2 3 0

    2 3 4 1

    2 3 4 2

    Case 1: 2.9998713992

    Case 2: 1

    Case 3: 0

    Case 4: 6.375

    Case 5: 9.09765625

     

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <cmath>
     7 #include <queue>
     8 #include <stack>
     9 #include <map>
    10 #include <string>
    11 #include <set>
    12 using namespace std;
    13 typedef long long LL;
    14 const int INF = 2e9;
    15 const LL LNF = 9e18;
    16 const int MOD = 1e9+7;
    17 const int MAXN = 1e5+100;
    18 
    19 double Get(int pos, int n)
    20 {
    21     return 1.0 - 1.0*((pos-1)*(pos-1)+(n-pos)*(n-pos))/(n*n);
    22 }
    23 
    24 double qpow(double x, int y)
    25 {
    26     double s = 1;
    27     while(y)
    28     {
    29         if(y&1) s *= x;
    30         x *= x;
    31         y >>= 1;
    32     }
    33     return s;
    34 }
    35 
    36 int main()
    37 {
    38     int T, x, y, z, k, kase = 0;
    39     scanf("%d", &T);
    40     while(T--)
    41     {
    42         double ans = 0;
    43         scanf("%d%d%d%d", &x,&y,&z,&k);
    44         for(int i = 1; i<=x; i++)
    45             for(int j = 1; j<=y; j++)
    46                 for(int t = 1; t<=z; t++)
    47                 {
    48                     double p = Get(i,x)*Get(j,y)*Get(t,z);
    49                     ans += 0.5-0.5*qpow(1-2*p, k);
    50                 }
    51         printf("Case %d: %.10lf
    ", ++kase, ans);
    52     }
    53 }
    View Code
  • 相关阅读:
    分段、分页&&内存碎片、外存碎片
    mysql中的事务处理
    算法的在线演示网站
    为什么要使用树以及使用什么树
    平衡多叉树--B-Tree(B树)
    MVCC--多版本并发控制机制
    mysql中的锁
    平衡二叉树--红黑树(RB-Tree)
    平衡二叉树--AVL树
    自平衡方式--旋转
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/8447337.html
Copyright © 2020-2023  润新知