E.cpp 903 B

12345678910111213141516171819202122232425262728293031323334
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 500;
  4. double f[maxn + 10][maxn + 10];
  5. int main() {
  6. //ifstream cin("input.txt");
  7. int T;
  8. cin >> T;
  9. while (T-- > 0) {
  10. int n, h;
  11. cin >> n >> h;
  12. if (h <= 3 * n) cout << "1.000000" << endl;
  13. else if (h > 6 * n) cout << "0.000000" << endl;
  14. else {
  15. h -= 3 * n;
  16. memset(f, 0, sizeof(f));
  17. f[1][0] = 1;
  18. f[1][1] = 0.75;
  19. f[1][2] = 0.5;
  20. f[1][3] = 0.25;
  21. for (int i = 2; i <= n; i++) {
  22. for (int j = 0; j <= 3 * i; j++) {
  23. for (int k = 0; k <= j && k <= 3; k++) {
  24. f[i][j] += f[(i - 1 + n) % n][j - k] * 0.25;
  25. }
  26. }
  27. }
  28. cout << fixed << setprecision(6) << f[n][h] << endl;
  29. }
  30. }
  31. return 0;
  32. }