#include #include #include #include #include #include #include int main() { using namespace std; constexpr int N = 101; constexpr double EPS = 1e-12; using Mat = array, N>; using Vec = array; // Ab + c = b を満たす b を求める auto solve = [&](const Mat &A, const Vec &c) -> Vec { Mat mat{}; Vec b{}; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { mat[i][j] = (i == j ? 1.0 : 0.0) - A[i][j]; } b[i] = c[i]; } for (int j = 0; j < N; j++) { int piv = j; for (int i = j + 1; i < N; i++) { if (abs(mat[i][j]) > abs(mat[piv][j])) { piv = i; } } assert(abs(mat[piv][j]) >= EPS); swap(mat[j], mat[piv]); swap(b[j], b[piv]); const double inv = 1.0 / mat[j][j]; for (int i = j + 1; i < N; i++) { const double t = mat[i][j] * inv; mat[i][j] = 0.0; for (int k = j + 1; k < N; k++) { mat[i][k] -= mat[j][k] * t; } b[i] -= t * b[j]; } } for (int i = N - 1; i >= 0; i--) { double s = b[i]; for (int j = i + 1; j < N; j++) { s -= mat[i][j] * b[j]; } b[i] = s / mat[i][i]; } return b; }; int p, q; cin >> p >> q; Mat A{}; Vec c{}; for (int i = 0; i < N; i++) { if (i > 0) { A[i][max(0, i - q)] += 1.0 * i / 200; } if (i < N - 1) { A[i][min(N - 1, i + q)] += (100.0 - i) / 300; } c[i] = 1.0 / 3 + 1.0 * i / 600; } Vec b = solve(A, c); double ans = 1.0 / 3 + b[p] / 3; cout << format("{:.15f}\n", ans); }