Parcourir la source

更新 'E.cpp'

爱玲姐姐 il y a 5 ans
Parent
commit
ecd5fdbc27
1 fichiers modifiés avec 28 ajouts et 16 suppressions
  1. 28 16
      E.cpp

+ 28 - 16
E.cpp

@@ -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;
 }