直接组合数无奈超时Orz
去网上看了个题解 好厉害Orz
推导要把组合数写成阶乘才行
#include <cstdio>
#include <algorithm>
#define SF scanf
#define PF printf
using namespace std;
int n;
const int MAXN = 100000;
double d[MAXN+10];
int main()
{
// d[i] = C(n-2, (n-2) / 2) / 2 ^ (n-2)
// d[n] / d[n-2] = (n - 3) / (n - 2)
d[2] = 1;
for(int i = 4; i <= MAXN; i += 2) d[i] = d[i-2] * (i - 3) / (i - 2);
int T; SF("%d", &T); while(T--) {
SF("%d", &n);
PF("%.4lf\n", 1 - d[n]);
}
}