HDU 5810 Balls and Boxes (找规律)

Balls and Boxes

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5810

Description

Mr. Chopsticks is interested in random phenomena, and he conducts an experiment to study randomness. In the experiment, he throws n balls into m boxes in such a manner that each ball has equal probability of going to each boxes. After the experiment, he calculated the statistical variance V as V = \frac{\sum_{i=1}^{m}(X_{i}-\bar X)^{2}}{m} where Xi is the number of balls in the ith box, and X¯ is the average number of balls in a box. Your task is to find out the expected value of V.

Input

The first line is an integer T (T <= 10), indicating the number of test case. Each test case begins with an integer N (1 <= N <= 1000), indicating the number of towns. Then N numbers in a line, the ith number ai (0 <= ai < N) has been described above.

Output

For each test case, output "Case #X: Y" in a line (without quotes), where X is the case number starting from 1, and Y is "Yes" if you can construct successfully or "No" if it's impossible to reach the requirements. If Y is "Yes", output an integer M in a line, indicating the number of roads. Then M lines follow, each line contains two integers u and v (1 <= u, v <= N), separated with one single space, indicating a road direct from town u to town v. If there are multiple possible solutions, print any of them.

Sample Input

3 3 2 1 0 2 1 1 4 3 1 1 0

Sample Output

Case #1: Yes 2 1 2 2 3 Case #2: No Case #3: Yes 4 1 2 1 3 2 4 3 4

Source

2016 Multi-University Training Contest 7
##题意: 把n个球等可能地投入m个盒子. 求方差的期望.
##题解: 推了几个数,然后眼神拟合出公式..... ans = n*(m-1) / m^2 .
官方题解: ![](http://images2015.cnblogs.com/blog/764119/201608/764119-20160809174317246-914199549.png)

##代码: ``` cpp #include #include #include #include #include #include #include #include #include #define LL long long #define eps 1e-8 #define maxn 1010 #define mod 100000007 #define inf 0x3f3f3f3f #define mid(a,b) ((a+b)>>1) #define IN freopen("in.txt","r",stdin); using namespace std;

LL gcd(LL a,LL b) {
return b==0? a:gcd(b,a%b);
}

int main(int argc, char const *argv[])
{
//IN;

LL n,m;
while(scanf("%lld %lld", &n,&m) != EOF && (n||m))
{
    LL ans1 = n * (m - 1);
    LL ans2 = m * m;
    LL gcds = gcd(ans1, ans2);

    printf("%lld/%lld\n", ans1/gcds, ans2/gcds);
}

return 0;

}

posted @ 2016-08-09 17:45  Sunshine_tcf  阅读(442)  评论(0编辑  收藏  举报