Submission #843766

#TimeUsernameProblemLanguageResultExecution timeMemory
843766kitsuneWatching (JOI13_watching)C++14
100 / 100
140 ms16212 KiB
#include <bits/stdc++.h> /// kitsune using namespace std; #define fi first #define se second #define mp make_pair //#define int long long #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() #define rep(i, l, r) for (int i = (int)(l); i <= (int)(r); i++) #define per(i, r, l) for (int i = (int)(r); i >= (int)(l); i--) typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; template<typename _Tp> bool minimize(_Tp &__a, const _Tp &__b) { if (__a > __b) { __a = __b; return true; } return false; } template<typename _Tp> bool maximize(_Tp &__a, const _Tp &__b) { if (__a < __b) { __a = __b; return true; } return false; } const int siz = 2e3 + 2; const int SIZ = 1e6 + 2; const int mod = 1e9 + 7; const int maxx = 2e9; const ll MAXX = 1e18; const string file = "1"; int n, a, b; int p[siz]; int dp[siz][siz]; bool check(int w) { memset(dp, 0x3f, sizeof(dp)); dp[0][0] = 0; rep (i, 1, n) { int j_1 = lower_bound(p + 1, p + n + 1, p[i] - w + 1) - p - 1; int j_2 = lower_bound(p + 1, p + n + 1, p[i] - 2 * w + 1) - p - 1; rep (k, 0, a) { if (k > 0) { minimize(dp[i][k], dp[j_1][k - 1]); } minimize(dp[i][k], dp[j_2][k] + 1); } } rep (k, 0, a) { if (dp[n][k] <= b) { return true; } } return false; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); // freopen((file + ".inp").c_str(), "r", stdin); // freopen((file + ".out").c_str(), "w", stdout); cin >> n >> a >> b; minimize(a, n); minimize(b, n); rep (i, 1, n) { cin >> p[i]; } sort(p + 1, p + n + 1); int ans = -1; for (int lb = 1, rb = 1e9; lb <= rb; ) { int mb = (lb + rb) / 2; if (check(mb)) { ans = mb; rb = mb - 1; } else { lb = mb + 1; } } cout << ans << "\n"; // cerr << "Time: " << 1000 * clock() / CLOCKS_PER_SEC << " ms\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...