#include <iostream>
#include <algorithm>
#include <queue>
//#define INPUT_FILE
#ifdef INPUT_FILE
#include <fstream>
#endif
const long MAX_N = 1000000;
long n, a, b;
long swtime[MAX_N];
// Funkcija patikrina, ar galima sudėlioti dalyvius taip, kad
// maksimalus skirtumas tarp lėčiausio ir greičiausio būtų
// d_test ar mažesnis.
bool assign_groups(long d_test) {
std::queue<long> groups;
groups.push(-1);
long i = a - 1;
// Iš eilės einame nuo greičiausio iki lėčiausio ir bandome grupuoti.
// Tinkamas rastas grupes saugoje eilėje "groups".
// Algoritmo sudėtingumas - O(N)
while (i < n && !groups.empty()) {
if (i - groups.front() >= a) {
if (i - groups.front() <= b && (swtime[i] - swtime[groups.front() + 1]) <= d_test) {
// Grupė (nuo i iki groups.front()) yra leidžiamo ilgio bei
// laikų skirtumas tarp lėčiausio ir greičiausio neviršija d_test.
// Įsimename.
groups.push(i);
i++;
}
else
// grupė tarp i ir groups.front() yra per ilga, todėl group.front() išmetame
// kaip nebetinkamą tolimesniems grupavimams.
groups.pop();
}
else
i++;
}
// Tikriname, ar paskutinis plaukikas buvo įtrauktas į vieną iš grupių.
return (!groups.empty() && groups.back() == n - 1);
}
int main() {
#ifdef INPUT_FILE
std::ifstream in("plaukimo-varzybos.in");
std::cin.rdbuf(in.rdbuf()); //redirect std::cin to in.txt!
std::ofstream out("out.txt");
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
#endif
std::cin >> n >> a >> b;
for (long i = 0; i < n; i++)
std::cin >> swtime[i];
std::sort(swtime, swtime + n);
// Vykdysime dvejetainę paiešką. dl, dh - mažiausias ir didžiausias galimi sprendiniai
// (tikrinamo intervalo rėžiai).
long dl = 0, // Pasirenkame 0 kaip mažiausią pradinį rėžį.
dh = swtime[n - 1] - swtime[0]; // Didžiausias rėžis - laikas tarp greičiausio ir lėčiausio plaukikų.
while (dl != dh) { // Baigiame, kai rėžiai tampa lygūs.
long d_test = (dh + dl) / 2; // Tikriname intervalo vidurį (dvejetainės paieškos principas).
if (assign_groups(d_test))
dh = d_test; // Taip, tai yra galimas sprendinys, todėl jis patampa nauja intervalo pabaiga.
else
// Ne, d_test sprendinys negalimas. Mažiausias galimas sprendinys bus nemažesnis nei d_test+1.
dl = d_test + 1;
}
// dl = dh reikėtų taip pat patikrinti, jei sąlygoje nebūtų parašyta, kad sprendinys visada egzistuoja.
std::cout << dl;
#ifdef INPUT_FILE
in.close();
out.close();
#endif
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
376 KB |
Output is correct |
2 |
Correct |
48 ms |
1144 KB |
Output is correct |
3 |
Correct |
9 ms |
376 KB |
Output is correct |
4 |
Correct |
720 ms |
8268 KB |
Output is correct |
5 |
Correct |
670 ms |
8184 KB |
Output is correct |
6 |
Correct |
71 ms |
1176 KB |
Output is correct |
7 |
Correct |
608 ms |
7620 KB |
Output is correct |
8 |
Correct |
1 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
256 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
256 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
5 |
Correct |
1 ms |
256 KB |
Output is correct |
6 |
Correct |
2 ms |
256 KB |
Output is correct |
7 |
Correct |
2 ms |
256 KB |
Output is correct |
8 |
Correct |
2 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
380 KB |
Output is correct |
10 |
Correct |
2 ms |
256 KB |
Output is correct |
11 |
Correct |
2 ms |
256 KB |
Output is correct |
12 |
Correct |
2 ms |
256 KB |
Output is correct |
13 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
376 KB |
Output is correct |
2 |
Correct |
48 ms |
1144 KB |
Output is correct |
3 |
Correct |
9 ms |
376 KB |
Output is correct |
4 |
Correct |
720 ms |
8268 KB |
Output is correct |
5 |
Correct |
670 ms |
8184 KB |
Output is correct |
6 |
Correct |
71 ms |
1176 KB |
Output is correct |
7 |
Correct |
608 ms |
7620 KB |
Output is correct |
8 |
Correct |
1 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
256 KB |
Output is correct |
11 |
Correct |
21 ms |
572 KB |
Output is correct |
12 |
Correct |
21 ms |
804 KB |
Output is correct |
13 |
Correct |
34 ms |
888 KB |
Output is correct |
14 |
Correct |
62 ms |
1036 KB |
Output is correct |
15 |
Correct |
268 ms |
5752 KB |
Output is correct |
16 |
Correct |
640 ms |
6648 KB |
Output is correct |
17 |
Correct |
69 ms |
888 KB |
Output is correct |
18 |
Correct |
40 ms |
888 KB |
Output is correct |
19 |
Correct |
2 ms |
376 KB |
Output is correct |
20 |
Correct |
866 ms |
8164 KB |
Output is correct |
21 |
Correct |
860 ms |
8088 KB |
Output is correct |
22 |
Correct |
2 ms |
376 KB |
Output is correct |
23 |
Correct |
1 ms |
256 KB |
Output is correct |
24 |
Correct |
2 ms |
256 KB |
Output is correct |
25 |
Correct |
2 ms |
256 KB |
Output is correct |
26 |
Correct |
2 ms |
376 KB |
Output is correct |
27 |
Correct |
2 ms |
380 KB |
Output is correct |
28 |
Correct |
2 ms |
256 KB |
Output is correct |
29 |
Correct |
2 ms |
256 KB |
Output is correct |
30 |
Correct |
2 ms |
256 KB |
Output is correct |
31 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
376 KB |
Output is correct |
2 |
Correct |
48 ms |
1144 KB |
Output is correct |
3 |
Correct |
9 ms |
376 KB |
Output is correct |
4 |
Correct |
720 ms |
8268 KB |
Output is correct |
5 |
Correct |
670 ms |
8184 KB |
Output is correct |
6 |
Correct |
71 ms |
1176 KB |
Output is correct |
7 |
Correct |
608 ms |
7620 KB |
Output is correct |
8 |
Correct |
1 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
256 KB |
Output is correct |
11 |
Correct |
21 ms |
572 KB |
Output is correct |
12 |
Correct |
21 ms |
804 KB |
Output is correct |
13 |
Correct |
34 ms |
888 KB |
Output is correct |
14 |
Correct |
62 ms |
1036 KB |
Output is correct |
15 |
Correct |
268 ms |
5752 KB |
Output is correct |
16 |
Correct |
640 ms |
6648 KB |
Output is correct |
17 |
Correct |
69 ms |
888 KB |
Output is correct |
18 |
Correct |
40 ms |
888 KB |
Output is correct |
19 |
Correct |
2 ms |
376 KB |
Output is correct |
20 |
Correct |
866 ms |
8164 KB |
Output is correct |
21 |
Correct |
860 ms |
8088 KB |
Output is correct |
22 |
Correct |
2 ms |
376 KB |
Output is correct |
23 |
Correct |
1 ms |
256 KB |
Output is correct |
24 |
Correct |
2 ms |
256 KB |
Output is correct |
25 |
Correct |
2 ms |
256 KB |
Output is correct |
26 |
Correct |
2 ms |
376 KB |
Output is correct |
27 |
Correct |
2 ms |
380 KB |
Output is correct |
28 |
Correct |
2 ms |
256 KB |
Output is correct |
29 |
Correct |
2 ms |
256 KB |
Output is correct |
30 |
Correct |
2 ms |
256 KB |
Output is correct |
31 |
Correct |
2 ms |
376 KB |
Output is correct |
32 |
Correct |
24 ms |
868 KB |
Output is correct |
33 |
Correct |
395 ms |
5420 KB |
Output is correct |
34 |
Correct |
341 ms |
5116 KB |
Output is correct |
35 |
Correct |
1008 ms |
12452 KB |
Output is correct |
36 |
Correct |
728 ms |
12324 KB |
Output is correct |
37 |
Correct |
711 ms |
11604 KB |
Output is correct |
38 |
Correct |
432 ms |
5964 KB |
Output is correct |