题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25539#problem/G

题目意思:

  有n个人,每个人有一个礼物,每个人能拿自己礼物,n个人随机送礼物,给一个数字k,求出可以找到k个人,满足:这k个人里面,第一个人把礼物给第二个人,第二个人把礼物给第三个人,以此类推,第k个人把礼物给第1个人.求满足这个条件的概率.

组合数学:

满足条件的一组k个人称为一个k环,注意:可能有多个k环!先考虑至少形成一个k环的情况:A(n,k) * (n-1)^(n-k) / (k * (n-1)^(n)) == A(n, k) / (k * (n-1)^k) ;然后在考虑至少形成m个环的情况.

设至少形成m个环的概率是:f(m) = A(n, km)/(k^m*m!*(n-1)^(km)) 所以只需要递推m = 1 .... m = n/k

然后可以发现:f(m)/f(m-1) = A(n, km) / (A(n, k(m-1))*k*m(n-1)^k),因此可以根据计算出的f(1)求出f(2), f(3)....

根据容斥:ans = f(1) - f(2) + f(3) - f(4) + ....

ORZ lyl的代码:

 #include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <list>
using namespace std;
#define INF 0x3f3f3f3f
const double eps=1e-; int main ( int argc, char *argv[] )
{
double ans, t;
int i, k, n, tot, j;
#ifndef ONLINE_JUDGE
freopen("in.txt", "r",stdin);
#endif
while (~scanf("%d", &tot)) {
while (tot--) {
scanf("%d%d", &n, &k);
for (i=,ans=; i<k; ans=ans*(n-i++)/(n-));
for (t=ans/=k,i=; i*k<=n; ++i) {
for (t=t/i/k,j=n-(i-)*k; j>n-i*k; t=t*j--/(n-));
if (t<eps) break; else ans = i&?ans+t:ans-t;
}
printf("%.9lf\n", ans);
}
}
return EXIT_SUCCESS;
}

不经过深思熟虑是写不出这么精简的代码的...ORZ

uestc1888 Birthday Party    组合数学,乘法原理的更多相关文章

  1. Codeforces 785D Anton and School - 2(推公式+乘法原理+组合数学)

    题目链接 Anton and School - 2 对于序列中的任意一个单括号对(), 左括号左边(不含本身)有a个左括号,右括号右边(不含本身有)b个右括号. 那么答案就为 但是这样枚举左右的()的 ...

  2. BZOJ_1005_ [HNOI2008]_明明的烦恼_(组合数学+purfer_sequence+高精度+分解因数+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1005 一棵树有n个点,给出没给节点的度,如果没有限制则为-1,求共有多少种可能的树. 分析 蒟 ...

  3. [SinGuLaRiTy] 组合数学题目复习

    [SinGuLaRiTy] Copyright (c) SinGuLaRiTy 2017.  All Rights Reserved. [CQBZOJ 2011] 计算系数 题目描述 给定一个多项式( ...

  4. 组合数学1.4&3.10 By cellur925

    本文引用于清华大学出版社卢开澄.卢华明<组合数学第五版>. 今天我们稍微讨论下圆排列以及$n$对夫妻的问题. 1.4圆周排列 这个问题是:从$n$个人中取$r$个在圆周上,我们用$Q(n, ...

  5. [CSP初赛] 组合数学的三个技巧以及从另一方面思考组合类问题

    也不知道老师讲不讲 话说好久没有水博客了,看了一点\(python\)然后就去搞文化课了 正好网课讲到组合数学,然后觉得还蛮难的(其实是我变菜了),就想到了以前的\(csp\)的组合数学基础 果然被我 ...

  6. 算法讲堂二:组合数学 & 概率期望DP

    组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...

  7. 2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP)

    2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP) https://www.luogu.com.cn/problem/P1450 题意: 共有 44 种硬币.面 ...

  8. poj 3734 Blocks 快速幂+费马小定理+组合数学

    题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...

  9. 组合数学or not ---- n选k有重

    模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...

随机推荐

  1. Ibatis.Net 入门示例(一)

    新项目用的是Ibatis.Net.哥的感觉是NHibernate才是哥的最爱.没办法,即使重复,也要抽时间学习.努力做好这份工作再说吧. 一.Ibatis.Net-SQLServer2008 还是以哥 ...

  2. 理解ROS rqt_console和 roslaunch

    1.使用rqt_console和roslaunch 这篇教程将介绍使用rqt_console和rqt_logger_level来调试以及使用roslaunch一次启动许多nodes.如果你使用ROS  ...

  3. ZOJ3675:Trim the Nails

    Robert is clipping his fingernails. But the nail clipper is old and the edge of the nail clipper is ...

  4. html中offsetTop、clientTop、scrollTop、offsetTop

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...

  5. C++封装、继承、多态

    C++封装继承多态总结 面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重 ...

  6. (转)JS中innerHTML,innerText,value

    原文:http://holysonll.blog.163.com/blog/static/21413909320134111054352/ JS中innerHTML,innerText,value 2 ...

  7. select multiple images in Android Gallery

    http://stackoverflow.com/questions/18520976/all-properties-of-intent-putextra-to-crop-image-in-andro ...

  8. Java容器类List,ArrayList及LinkedList

    List容器类图 List是一个接口,它继承自Collection和Iterable,它的实现类有AbstractList,AbstrackSequenceList,ArrayList,LinkedL ...

  9. 数据结构《10》----二叉树 Morris 中序遍历

    无论是二叉树的中序遍历还是用 stack 模拟递归, 都需要 O(n)的空间复杂度. Morris 遍历是一种 常数空间 的遍历方法,其本质是 线索二叉树(Threaded Binary Tree), ...

  10. “Compiled” Python files

    To speed up loading modules, Python caches the compiled version of each module in the __pycache__ di ...