HDU 4465 Candy(組合+log優化)
題目大意:給你兩個罐子,裡面有糖果每次只能從一個罐子裡面取一個糖果,開啟A的概率為p,問當一個罐子取完之後,另一個罐子剩糖果的期望是多少。
我們可以知道最少是取第n+1次的時候才會有一個罐子為空,我們可以推出組合公式:
(n-k)*C(n+k, k)*((1-p)^(n+1)*p^k+(1-p)^k*p^(n+k));0 <= k && k <= n-1。
求一個和就是所有的組合情況了,但是組合數很大我們可以用log來進行優化。
我們已知:C(n,m) = m!/n!/(m-n)! = log(m!)/log(n!)/log(m-n)。
m!= 1*2*……*m = log(1)+log(2)+……+log(m).
先打表在直接求就可以了啊。
C(m,n)=exp(logC(m,n))
Candy
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2229 Accepted Submission(s): 958
Special Judge
Problem Description
LazyChild is a lazy child who likes candy very much. Despite being very young, he has two large candy boxes, each contains n candies initially. Everyday he chooses one box and open it. He chooses the first box with probability p and the second box with probability
(1 - p). For the chosen box, if there are still candies in it, he eats one of them; otherwise, he will be sad and then open the other box.
He has been eating one candy a day for several days. But one day, when opening a box, he finds no candy left. Before opening the other box, he wants to know the expected number of candies left in the other box. Can you help him?
He has been eating one candy a day for several days. But one day, when opening a box, he finds no candy left. Before opening the other box, he wants to know the expected number of candies left in the other box. Can you help him?
Input
There are several test cases.
For each test case, there is a single line containing an integer n (1 ≤ n ≤ 2 × 105) and a real number p (0 ≤ p ≤ 1, with 6 digits after the decimal).
Input is terminated by EOF.
For each test case, there is a single line containing an integer n (1 ≤ n ≤ 2 × 105) and a real number p (0 ≤ p ≤ 1, with 6 digits after the decimal).
Input is terminated by EOF.
Output
For each test case, output one line “Case X: Y” where X is the test case number (starting from 1) and Y is a real number indicating the desired answer.
Any answer with an absolute error less than or equal to 10-4 would be accepted.
Any answer with an absolute error less than or equal to 10-4 would be accepted.
Sample Input
10 0.400000
100 0.500000
124 0.432650
325 0.325100
532 0.487520
2276 0.720000
Sample Output
Case 1: 3.528175
Case 2: 10.326044
Case 3: 28.861945
Case 4: 167.965476
Case 5: 32.601816
Case 6: 1390.500000
Source
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <time.h>
#include <stack>
#include <map>
#include <set>
#define eps 1e-8
///#define LL long long
#define LL __int64
#define INF 0x3f3f3f
#define PI 3.1415926535898
#define mod 1000000007
using namespace std;
const int maxn = 505000;
double f[maxn];
double logc(int m, int n)///C(n,m) = m!/n!/(m-n)!
{
return f[m]-f[n]-f[m-n];
}
int main()
{
f[0] = 0;
for(int i = 1; i <= 400005; i++) f[i] = f[i-1]+log(i*1.0);
int Case = 1;
int n;
double p;
while(~scanf("%d %lf",&n, &p))
{
double sum = 0.0;
for(int k = 0; k < n; k++)
{
///sum += (n-k)*C(n+k, k)*((1-p)^(n+1)*p^k+(1-p)^k*p^(n+k));
sum += 1.0*(n-k)*(exp(logc(n+k, k)+(n+1)*1.0*log(1.0-p)+k*1.0*log(p*1.0)) + exp(logc(n+k, k)+(n+1)*1.0*log(p*1.0)+k*1.0*log(1.0-p)));
}
printf("Case %d: %.6lf\n",Case++, sum);
}
}
相關文章
- hdu 4546 優先佇列 數列組合和第m小佇列
- 【oracle 效能優化】組合索引查詢。Oracle優化索引
- HDU 4497 GCD and LCM(拆素數+組合)GC
- HDU 2582 f(n) (組合數的gcd)GC
- 【oracle 效能優化】組合索引之index_ssOracle優化索引Index
- 手把手教你如何組合線上學習:實時反饋玩轉組合優化優化
- 組合優於繼承繼承
- 優化 WebLogic優化Web
- SQLServer索引優化(3):對於建組合索引的要求SQLServer索引優化
- 基於Barra多因子模型的組合權重優化模型優化
- Prefab 優化:向預製體打出最有效的組合拳優化
- redo log file 優化優化
- oracle weblogic 優化OracleWeb優化
- Dengine在同花順組合管理業務中的優化實踐優化
- 企業專業化組合
- HDU7458-啟發式合併最佳化DP
- Docker的組合優於繼承 - frankelDocker繼承
- hdu 3507 斜率優化DP入門題優化
- SUM優化(複合索引)優化索引
- HDU 1792 - A New Change Problem(規律,最大不能組合數及其個數)
- 優秀開源組合:助你快速研發
- hdu1025 最大遞增子序列的優化優化
- HDU 5318 The Goddess Of The Moon(遞推+矩陣優化)Go矩陣優化
- 圖解Leetcode組合總和系列——回溯(剪枝優化)+動態規劃圖解LeetCode優化動態規劃
- [譯] 柯里化與函式組合函式
- 組合最佳化 學習筆記筆記
- weblogic幾個優化引數Web優化
- 組合
- 組合邏輯環(Combinational Logic Loop)OOP
- PostgreSQL一複合查詢SQL優化例子-(多個exists,範圍檢索,IN檢索,模糊檢索組合)SQL優化
- IT組合和專案組合管理(轉)
- 【數學】組合數學 - 排列組合
- HDU 4427 Math Magic【dp+優化+滾動陣列】【好題】優化陣列
- 【效能優化】Can the log buffer be too big?優化
- 機器學習之特徵組合:組合獨熱向量機器學習特徵
- 組合數學筆記-排列與組合筆記
- 【dp+組合數學】hdu 2018 多校第九場 1001 Rikka with Nash Equilibrium hdu 6415UI
- 段合併優化及注意事項優化