题目大意:

  有c种不同的巧克力,每种无限个,意味着取出每种的几率每次为1/c。现在你需要取n次。然后将统计每种取出来的巧克力的数量。若为偶数则舍去,否则留下一个。问最后留下m个的概率是多少。

题目分析:

  由于取出每种巧克力的概率始终相同,。不妨假设取出奇数个的巧克力正好是1~m,m+1则取出偶数次,然后求出这种情况的次数。最后答案乘以C(c,m)再除以c^n即可。由于可以取出相同的巧克力,所以采用指数型生成函数。

  对于前m种,构造g(x)=x/1!+x^3/3!+x^5/5!.....=sinh(x),后面类似地构造出h(x)=cosh(x).答案就是sinh^m(x)*cosh^(c-m)(x)的n阶导数。

  将sinh(x)和cosh(x)写出来。得到e^x-e^(-x)/2和e^x+e^(-x)/2.其中加减法优先于除法。带入原式就得到了(e^x-e^(-x)/2)^m(x)*(e^x+e^(-x)/2)^(c-m)(x).通过二项式定理展开,然后乘起来。最后对e^kx单独泰勒展开。

  结果就是这些的和。值得注意的是这题会爆longlong,应该把过程取对数。

代码:

  

 #include<bits/stdc++.h>
using namespace std; int c,n,m; double C[][];
double res[][]; void work(){
memset(res,,sizeof(res));
if(m > c){puts("");return;}
int A = m,B = c-m;
double ans = ;
for(int i=;i<=B;i++){
for(int j=;j<=A;j++){
int f = ;
if(A-B+*i-*j < &&(n&)) f *= -;
if(j & ) f *= -;
res[i][j] = C[B][i]+C[A][j]+(double)n*log10(abs(A-B+*i-*j));
res[i][j] -= (double)c*log10(2.0);
res[i][j] += C[c][m];
res[i][j] -= (double)n*log10(c);
if(res[i][j] < -) continue;
ans += f*pow(,res[i][j]);
}
}
printf("%.3lf\n",ans+1e-8);
} int main(){
for(int i=;i<=;i++){
for(int j=;j<i;j++){
C[i][j] = C[i][j-]+log10(i-j+)-log10(j);
}
}
do{
scanf("%d",&c);
if(c == ) break;
scanf("%d%d",&n,&m);
work();
}while(true);
return ;
}

ZOJ1363 Chocolate 【生成函数】 【泰勒展开】的更多相关文章

  1. BZOJ3028食物——生成函数+泰勒展开

    题目描述 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数.他这次又准备带一些 ...

  2. ZOJ1363 Chocolate

    Chocolate Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge In 2100, ACM chocolat ...

  3. 2019.01.02 poj1322 Chocolate(生成函数+二项式定理)

    传送门 生成函数好题. 题意简述:一个袋子里有ccc种不同颜色的球,现要操作nnn次,每次等概率地从袋中拿出一个球放在桌上,如果桌上有两个相同的球就立刻消去,问最后桌上剩下mmm个球的概率. 第一眼反 ...

  4. HDU-6397(2018 Multi-University Training Contest 8) Character Encoding(生成函数+组合数学)

    题意 从$0$到$n-1$的数字里可重复的取至多$m$个数的和等于$k$的方案数. 思路 显然的生成函数的思路为构造 $(1+x+x^{2}+...+x^{n-1})^{m}$ 那么$x^{k}$的系 ...

  5. 多项式&生成函数(~~乱讲~~)

    多项式 多项式乘法 FFT,NTT,MTT不是前置知识吗?随便学一下就好了(虽然我到现在还是不会MTT,exlucas也不会用) FTT总结 NTT总结 泰勒展开 如果一个多项式\(f(x)\)在\( ...

  6. 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)

    数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...

  7. [2018集训队作业][UOJ450] 复读机 [DP+泰勒展开+单位根反演]

    题面 传送门 思路 本文中所有$m$是原题目中的$k$ 首先,这个一看就是$d=1,2,3$数据分治 d=1 不说了,很简单,$m^n$ d=2 先上个$dp$试试 设$dp[i][j]$表示前$i$ ...

  8. 【BZOJ5020】[THUWC 2017]在美妙的数学王国中畅游 泰勒展开+LCT

    [BZOJ5020][THUWC 2017]在美妙的数学王国中畅游 Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数 ...

  9. BZOJ 3028 食物 (生成函数+数学题)

    题面:BZOJ传送门 题目让我们求这些物品在合法范围内任意组合,一共组合出$n$个物品的方案数 考虑把每种食物都用生成函数表示出来,然后用多项式乘法把它们乘起来,第$n$项的系数就是方案数 汉堡:$1 ...

随机推荐

  1. SkylineGlobe 如何实现二次开发加载KML文件

    示例代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  2. JS-JS代码插入位置

    一.HTML 页面的 <head> 部分中 由于 HTML 文档是由浏览器从上到下依次载入的,将 JavaScript 代码放置于<head></head> 标签之 ...

  3. 在平衡树的海洋中畅游(一)——Treap

    记得有一天翔哥毒奶我们: 当你们已经在平衡树的海洋中畅游时,我还在线段树的泥沼中挣扎. 我觉得其实像我这种对平衡树一无所知的蒟蒻也要开一开数据结构了. 然后花了一天啃了下最简单的平衡树Treap,感觉 ...

  4. [2019校招] - Java多线程面试题总结

    Object 的 wait()和notify() 方法 下图为线程状态的图: Object 对象中的 wait()和notify()是用来实现实现等待 / 通知模式.其中等待状态和阻塞状态是不同的.等 ...

  5. Quartz_简单使用

    第一步:安装 新建一个QuartzDemo项目后,安装下面的程序包 Install-Package Quartz Install-Package Common.Logging.Log4Net1211 ...

  6. Windows10 家庭版 Docker的安装

    Docker的安装 1.简介:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全 ...

  7. JS冷门知识盘点

    (+new Date() 是简略写法,得到毫秒 超过多行显示省略号 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; ...

  8. 《Linux内核设计与实现》第五章学习笔记

    <Linux内核设计与实现>第五章学习笔记 姓名:王玮怡  学号:20135116 一.与内核通信     在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...

  9. 20135316王剑桥Linux内核学习记笔记第七周

    20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 一.可执行程序是怎么得来的? 编译 ...

  10. 《Linux内核分析》第七周: 可执行程序的装载

    LINUX内核分析第七周学习总结--可执行程序的装载 杨舒雯(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...