hdu 5245__Joyful

Joyful

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 515    Accepted Submission(s): 224


Problem Description
Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a wall that looks like an M×N matrix. The wall has M×N squares in all. In the whole problem we denotes (x,y) to be the square at the x-th row, y-th column. Once Sakura has determined two squares (x1,y1) and (x2,y2), she can use the magical tool to paint all the squares in the sub-matrix which has the given two squares as corners.

However, Sakura is a very naughty girl, so she just randomly uses the tool for K times. More specifically, each time for Sakura to use that tool, she just randomly picks two squares from all the M×N squares, with equal probability. Now, kAc wants to know the expected number of squares that will be painted eventually.
 

Input
The first line contains an integer T(T100), denoting the number of test cases.

For each test case, there is only one line, with three integers M,N and K.
It is guaranteed that 1M,N5001K20.
 

Output
For each test case, output ''Case #t:'' to represent the t-th case, and then output the expected number of squares that will be painted. Round to integers.
 

Sample Input
2 3 3 1 4 4 2
 

Sample Output
Case #1: 4 Case #2: 8
Hint
The precise answer in the first test case is about 3.56790123.
 

Source
 
題意:給出一個n*m的牆壁,進行k次染色,每次選取兩個點(x1,y1),(x2,y2)作爲染色矩形的對角頂點。求k次染色後染色面積的期望值。

題解參考了這位大牛的博客。代碼如下。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
    int T,n,m,k,cas=1;
    scanf("%d",&T);
    while(T--) {
        scanf("%d%d%d",&n,&m,&k);
        double ans=0;
        for(double i=1;i<=n;i++) {
            for(double j=1;j<=m;j++) {
                double p=0;
                p+=(i-1)*(j-1)*(m-j+1)*(n-i+1);//1
                p+=(i-1)*(n-i+1)*m;//2
                p+=(i-1)*(m-j)*(n-i+1)*j;//3
                p+=(j-1)*(m-j+1)*n;//4
                p+=n*m;//5
                p+=(m-j)*n*j;//6
                p+=(n-i)*(j-1)*i*(m-j+1);//7
                p+=(n-i)*i*m;//8
                p+=(n-i)*(m-j)*i*j;//9
                p=p/n/m/n/m;
                ans+=1-pow(1-p,k);//k次染色操作被染色的概率
            }
        }
        printf("Case #%d: %d\n",cas++,int(ans+0.5));
    }
    return 0;
}


發佈了51 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章