POJ 1322 Chocolate(母函数)
2024-10-11 05:55:41
题目链接:http://poj.org/problem?id=1322
题意:
思路:
double C[N][N]; void init() { C[0][0]=1; int i,j; for(i=1;i<N;i++) { C[i][0]=C[i][i]=1; for(j=1;j<i;j++) C[i][j]=C[i-1][j-1]+C[i-1][j]; } } double Pow(double a,int b) { double ans=1; while(b) { if(b&1) ans*=a; a=a*a; b>>=1; } return ans; } int n,m,c; double cal() { double positive[N],negative[N],a[N],b[N]; double temp1,temp2; int i,j,k; for(i=0;i<=c;i++) positive[i]=negative[i]=a[i]=b[i]=0; temp1=Pow(0.5,m); for(i=0;i<=m;i++) { j=i-(m-i); if((m-i)&1) temp2=-temp1; else temp2=temp1; if(j>=0) a[j]+=temp2*C[m][i]; else b[-j]+=temp2*C[m][i]; } temp1=Pow(0.5,c-m); for(i=0;i<=c-m;i++) { temp2=temp1*C[c-m][i]; for(j=0;j<=m;j++) { k=j+i-(c-m-i); if(k>=0) positive[k]+=temp2*a[j]; else negative[-k]+=temp2*a[j]; } for(j=0;j<=m;j++) { k=-j+i-(c-m-i); if(k>=0) positive[k]+=temp2*b[j]; else negative[-k]+=temp2*b[j]; } } double ans=0; for(k=1;k<=c;k++) { if(n&1) negative[k]=-negative[k]; ans+=C[c][m]*Pow(1.0*k/c,n)*(positive[k]+negative[k]); } return ans; } int main() { init(); Rush(c) { if(!c) break; RD(n,m); if((n-m)%2||m>c||m>n) puts("0.000"); else if(n==0&&m==0) puts("1.000"); else PR(cal()); } }
最新文章
- 异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”
- CentOS6.5以runlevel 3开机时自动连接某无线设置示例
- 判断IE8
- 用GDB排查Python程序故障
- 百度地图BMap API实例
- Python 面向对象基础
- SICP 习题 (2.7) 解题总结 : 定义区间数据结构
- GC算法精解(五分钟让你彻底明白标记/清除算法)
- CJOJ 1943 【重庆八中模拟赛】寻找代表元(二分图最大匹配)
- 并发库应用之九 &; 到时计数器CountDownLatch应用
- linux为什么不可以添加硬链接
- docker学习笔记(一)-vagrant/docker machine安装docker,阿里云通过docker machine安装docker
- Py学生信息管理系统 案例(优化版)
- spring mvc 接收 put参数
- U盘量产大致研究思路
- java实验三——求平均数,数组排序(有关java保留小数位数,由于编译器版本未到1.5导致的报错format函数第二个参数不对,要求是Object[])
- Skype for Business Server-呼叫质量仪表板(一)安装与配置
- 从Java的堆栈到Equals和==的比較
- 相同内容 yaml 与 json 格式对比
- php-5.6.26源代码 - opcode处理器的注入