# 第二题,有点丑 (11777)#include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 15; typedef long long LL; double dp[maxn]; // dp[i]表示,对长度i进行分割燃烧时间的期望 void Init(int n) { dp[1] = 1.0; dp[2] = 1.0; for (int i = 3; i <= n; i++) { if (i % 2) { LL min_time = i / 2 + 1; LL max_time = i - 1; LL num = i / 2; LL sum = (min_time + max_time) * num; dp[i] = (double)sum / (double)(i - 1); } else { LL min_time = i / 2 + 1; LL max_time = i - 1; LL num = i / 2 - 1; LL sum = (min_time + max_time) * num + i / 2; dp[i] = (double)sum / (double)(i - 1); } } } int n; int main() { scanf("%d", &n); if (n == 1) { printf("1.0000\n"); return 0; } Init(n); double time_all = 0; for (int i = 1; i <= n - 1; i++) { int a = i; int b = n - i; if (abs(a - b) <= 1) time_all += max(a, b); else { time_all += min(a, b); time_all += dp[max(a, b) - min(a, b)]; } } time_all /= (double)(n - 1); printf("%.4f", time_all); return 0; }
1 1

相关推荐

牛客网
牛客企业服务