|
@@ -1,22 +1,34 @@
|
|
|
+#include<bits/stdc++.h>
|
|
|
+
|
|
|
using namespace std;
|
|
|
-typedef unsigned long long LL;
|
|
|
-LL f[31][2][2] = {0};
|
|
|
+const int maxn = 500;
|
|
|
+double f[maxn + 10][maxn + 10];
|
|
|
|
|
|
int main() {
|
|
|
- int n;
|
|
|
- cin >> n;
|
|
|
- if (n < 3) {
|
|
|
- cout << 0 << endl;
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- f[3][0][0] = f[3][0][1] = f[3][1][0] = 2, f[3][1][1] = 1;
|
|
|
- for (int i = 4; i <= n; i++) {
|
|
|
- f[i][0][0] = f[i - 1][0][0] + f[i - 1][0][1];
|
|
|
- f[i][0][1] = f[i - 1][1][1] + f[i - 1][1][0];
|
|
|
- f[i][1][0] = f[i - 1][0][0] + f[i - 1][0][1];
|
|
|
- f[i][1][1] = f[i - 1][1][0];
|
|
|
+ //ifstream cin("input.txt");
|
|
|
+ int T;
|
|
|
+ cin >> T;
|
|
|
+ while (T-- > 0) {
|
|
|
+ int n, h;
|
|
|
+ cin >> n >> h;
|
|
|
+ if (h <= 3 * n) cout << "1.000000" << endl;
|
|
|
+ else if (h > 6 * n) cout << "0.000000" << endl;
|
|
|
+ else {
|
|
|
+ h -= 3 * n;
|
|
|
+ memset(f, 0, sizeof(f));
|
|
|
+ f[1][0] = 1;
|
|
|
+ f[1][1] = 0.75;
|
|
|
+ f[1][2] = 0.5;
|
|
|
+ f[1][3] = 0.25;
|
|
|
+ for (int i = 2; i <= n; i++) {
|
|
|
+ for (int j = 0; j <= 3 * i; j++) {
|
|
|
+ for (int k = 0; k <= j && k <= 3; k++) {
|
|
|
+ f[i][j] += f[(i - 1 + n) % n][j - k] * 0.25;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ cout << fixed << setprecision(6) << f[n][h] << endl;
|
|
|
+ }
|
|
|
}
|
|
|
- cout << (1LL << n) - (f[n][0][0] + f[n][0][1] + f[n][1][0] + f[n][1][1]) << endl;
|
|
|
return 0;
|
|
|
}
|