省赛热身赛10-A - Dogs and Cages(排列组合&&思维)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Description
Jerry likes dogs. He has $N$ dogs numbered $0, 1, ..., N-1$. He also has $N$ cages numbered $0, 1, ..., N-1$. Everyday he takes all his dogs out and walks them outside. When he is back home, as dogs can’t recognize the numbers, each dog just randomly selects a cage and enters it. Each cage can hold only one dog.
One day, Jerry noticed that some dogs were in the cage with the same number of themselves while others were not. Jerry would like to know what’s the expected number of dogs that are NOT in the cage with the same number of themselves.
Input
The first line of the input gives the number of test cases, $T$. $T$ test cases follow.
Each test case contains only one number $N$, indicating the number of dogs and cages.
$1 \leq T \leq 10^5$
$1 \leq N \leq 10^5$
Output
For each test case, output one line containing “Case #x: y”, where $x$ is the test case number (starting from 1) and $y$ is the expected number of dogs that are NOT in the cage with the same number of itself.
$y$ will be considered correct if it is within an absolute or relative error of $10^{-6}$ of the correct answer.
Sample Input
2 1 2
Sample Output
Case #1: 0.00000000
Case #2: 1.00000000
Hint
In the first test case, the only dog will enter the only cage. So the answer is 0. In the second test case, if the first dog enters the cage of the same number, both dogs are in the cage of the same number, the number of mismatch is 0. If both dogs are not in the cage with the same number of itself, the number of mismatch is 2. So the expected number is (0+2)/2=1.
【分析】
- 一共有n个数,当1在1的位置上时,有n!种
- 当1不在1的位置上时,有n!-(n-1)!种,因为有n个数,所以乘以n
- 要求期望,故除以n!;
【代码】分析后,就是水题了。。。。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T,n,ca=0;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
printf("Case #%d: %0.8f\n",++ca,1.0*(n-1));
}
return 0;
}
下一篇: 简单实用!平面设计的一些技巧分享