# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1034392 | 2024-07-25T13:05:10 Z | tvladm2009 | Sparklers (JOI17_sparklers) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 5; ll n, k, t; ll x[N]; bool check(__int128 v) { printf("v=%d\n", (int)v); memset(dp, 0, sizeof(dp)); dp[k][k] = 1; for (int l = k; l >= 1; l--) { for (int r = k; r <= n; r++) { if (dp[l][r]) { if (r < n && x[r + 1] - x[l] <= 2 * v * (r - l + 1) * t) dp[l][r + 1] = 1; if (l > 1 && x[r] - x[l - 1] <= 2 * v * (r - l + 1) * t) dp[l - 1][r] = 1; } printf("%d ", dp[l][r]); } printf("\n"); } return dp[1][n]; } bool check2(__int128 v) { int l = k; int r = k; for (int i = 0; i < n; i++) { while (r < n && x[r + 1] - x[l] <= 2 * v * (r - l + 1) * t) r++; while (l > 1 && x[r] - x[l - 1] <= 2 * v * (r - l + 1) * t) l--; } return l == 1 && r == n; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> k >> t; for (int i = 1; i <= n; ++i) cin >> x[i]; ll l = 0, r = 1e9, sol = -1; while (l <= r) { ll m = (l + r) / 2; if (check2(m)) { sol = m; r = m - 1; } else { l = m + 1; } } cout << sol << "\n"; return 0; }