Submission #1266206

#TimeUsernameProblemLanguageResultExecution timeMemory
1266206flashmtMarathon Race 2 (JOI24_ho_t3)C++20
62 / 100
1596 ms16184 KiB
#include <bits/stdc++.h>
#ifdef LOCAL
#include "Debug.h"
#else
#define debug(...) 42
#endif
using namespace std;

int main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, l;
  cin >> n >> l;
  if (n > 2000)
    return 0;
  vector<int> a(n);
  for (int &x : a)
    cin >> x;
  sort(begin(a), end(a));

  auto isGood = [&](int from, int to, int oo)
  {
    vector<vector<int>> f(n, vector<int>(n, oo));
    for (int i = 0; i < n; i++)
      f[i][i] = min(abs(to - a[i]) * (n + 1), oo);

    for (int len = 2; len <= n; len++)
      for (int i = 0; i + len <= n; i++)
      {
        int j = i + len - 1, weight = n - (len - 1) + 1;

        f[i][j] = min(f[i][j], f[i + 1][j] + (a[i + 1] - a[i]) * weight);
        f[i][j] = min(f[i][j], f[j][i + 1] + (a[j] - a[i]) * weight);

        f[j][i] = min(f[j][i], f[j - 1][i] + (a[j] - a[j - 1]) * weight);
        f[j][i] = min(f[j][i], f[i][j - 1] + (a[j] - a[i]) * weight);
      }

    int res = min(f[0][n - 1] + abs(from - a[0]), f[n - 1][0] + abs(from - a[n - 1])) + n;
    return res < oo;
  };

  int q;
  cin >> q;
  while (q--)
  {
    int s, g, t;
    cin >> s >> g >> t;
    cout << (isGood(s, g, t + 1) ? "Yes" : "No") << '\n';
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...