CF 441E Valera and Number
阿新 • • 發佈:2019-04-28
name http strong solution 個數 ref ces its std
CF 441E
Description
一共執行\(k\)次,每次有\(p\%\)把\(x * 2\),有\((100 - p)\%\)把\(x + 1\)。問二進制下\(x\)末尾期望\(0\)的個數。
Solution
設\(f[i][j]\)為執行第\(i\)次後\(x + j\)末尾期望\(0\)的個數
加一:$f[i + 1][j - 1] = f[i + 1][j - 1] + (100 - p)% * f[i][j]; $
乘二:\(f[i + 1][j * 2] = f[i + 1][j * 2] + p\% * (f[i][j] + 1);\)
#include<bits/stdc++.h> using namespace std; int x, k; double p, p1; double f[300][300]; int main() { scanf("%d%d%lf", &x, &k, &p); p /= 100, p1 = 1.0 - p; for (int i = 0; i <= k; i ++) for (int j = x + i; j % 2 == 0; j /= 2) f[0][i] ++; for (int i = 0; i < k; i ++) for (int j = 0; j <= k; j ++) { if (j) f[i + 1][j - 1] += p1 * f[i][j]; // + 1 if (j * 2 <= k) f[i + 1][j * 2] += p * (f[i][j] + 1); // * 2 } printf("%.10f\n", f[k][0]); return 0; }
CF 441E Valera and Number