欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

省赛热身赛10-A - Dogs and Cages(排列组合&&思维)

程序员文章站 2022-06-28 14:24:22
...

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Submit Status

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.

【分析】

  1. 一共有n个数,当1在1的位置上时,有n!种
  2. 当1不在1的位置上时,有n!-(n-1)!种,因为有n个数,所以乘以n
  3. 要求期望,故除以n!;

省赛热身赛10-A - Dogs and Cages(排列组合&&思维)

【代码】分析后,就是水题了。。。。

#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;
}

 

相关标签: 思维 排列组合