已对照过题解了,找不出问题。
查看原帖
已对照过题解了,找不出问题。
637788
kimi0705楼主2023/3/16 22:28
#include <cmath>
#include <cstdio>
#include <math.h>
#include <climits>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int t;
int n, arr[N], T;
double Time[N][2];
int main()
{
  cin >> t;
  while (t--)
  {
    cin >> n;
    cin >> arr[n + 1];
    for (int i = 1; i <= n; i++)
      cin >> arr[i];
    Time[n + 1][1] = 0;
    for (int i = 1; i <= n + 1; i++)
      Time[i][0] = Time[i - 1][0] + (arr[i] - arr[i - 1]) * 1.0 / i;
    for (int i = n; i >= 0; i--)
      Time[i][1] = Time[i + 1][1] + (arr[i + 1] - arr[i]) * 1.0 / (n - i + 1);
    T = -1;
    for (int i = 0; i <= n; i++)
      if (Time[i][0] <= Time[i][1] && Time[i + 1][0] >= Time[i][1])
      {
        T = i;
        break;
      }
    double ans;
    if (Time[T][0] >= Time[T + 1][1])
    {
      double S = arr[T + 1] - arr[T];
      S -= (Time[T][0] - Time[T + 1][1]) * (n - T + 1) * 1.0;
      ans = Time[T][0] + S * 1.0 / (n + 2);
    }
    else
    {
      double S = arr[T + 1] - arr[T];
      S -= (Time[T + 1][1] - Time[T][0]) * (T + 1);
      ans = Time[T + 1][1] + S / (n + 2);
    }
    printf("%.10lf\n", ans);
  }
  system("pause");
}

题解 https://www.luogu.com.cn/blog/dream-of-Au/solution-cf1408c

2023/3/16 22:28
加载中...