#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000000;
int times[MAX_N+5];
int N, A, B;
bool isFeasible(int maxDiff) {
int valid=0;
for (int aux=A; aux<=B; ++aux)
{
int OUT=1;
int groupStart = 0; // Indexul de început al grupului curent
for (int i = 0; i < N && OUT; ++i) {
// Dacă diferența dintre cel mai lent și cel mai rapid depășește maxDiff sau grupul devine prea mare (> B), încheiem grupul curent
if (times[i] - times[groupStart] > maxDiff || i - groupStart + 1 > aux) {
// Verificăm dacă grupul format are o dimensiune validă
if (i - groupStart < A) OUT=0;
// Începem un nou grup
groupStart = i;
}
}
// Verificăm dacă ultimul grup este valid
if (N - groupStart < A) OUT=0;
if (OUT==1)
valid=1;
}
if(valid==1)
return true;
return false;
}
int main() {
cin >> N >> A >> B;
for (int i = 0; i < N; ++i) {
cin >> times[i];
}
//Sort
sort(times, times + N);
//Binary search for the minimum maximum difference
int low = 0;
int high = times[N - 1] - times[0];
int result = high;
while (low <= high) {
int mid = low + (high - low) / 2;
// Check if this mid value is feasible
if (isFeasible(mid)) {
result = mid; // Update result and try for a smaller maximum difference
high = mid - 1;
} else {
low = mid + 1;
}
}
cout << result << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |