Блог пользователя Nerevar

Автор Nerevar, 14 лет назад, По-русски

Приношу извинения за краткость разбора: мы очень заняты проведением школьной олимпиады.

253A - Мальчики и девочки

Пусть мальчиков больше, чем девочек (противоположный случай решается аналогично). Тогда один из оптимальных ответов такой: мы будем добавлять детей парами мальчик-девочка (BG, в таком порядке) до тех пор, пока не кончатся девочки, за затем поставим в конец оставшихся мальчиков. К примеру, если имеется 7 мальчиков и 4 девочки, то мы построим ответ BGBGBGBGBBB.

253B - Физпрактикум

Для каждого x от 1 до 5000 посчитаем count(x) — количество результатов измерений, равных x. После этого переберем m — минимальный результат измерений от 1 до 5000. При фиксированном минимальном числе мы можем легко понять, какие числа следует удалить. А именно, нужно удалить все числа k такие, что k < m или k > 2·m. Чтобы посчитать количество таких чисел, мы используем суммируем count(k) по всем таким k.

253C - Текстовый редактор

Одно из возможных решений: поиск в ширину в графе, в котором вершинами являются пары (r, c), задающие номер строки и позицию в ней курсора. Из каждой вершины имеется не более четырех переходов, соответствующие нажатиям клавиш. Получается максимум около 107 вершин и около 4·107 переходов. Также задача может быть решена с использованием естественных жадных соображений.

253D - Таблица с буквами - 2

Переберем пару строк i, j (i < j), которые будут ограничивать нашу подтаблицу сверху и снизу. Для каждого символа ch от a до z выпишем в порядке возрастания номера таких столбцов k, для которых T[i, k] = T[j, k] = ch. Рассмотрим полученный список для какого-то символа ch. В этом списке мы должны посчитать количество пар столбцов l, r (l < r) таких, что в подтаблице с углами (i, l) и (j, r) содержится не более k символов «a». Это может быть сделано за линейное время с помощью метода двух указателей.

253E - Принтер

Сначала научимся моделировать процесс при полностью известных приоритетах. Будем хранить очередь заданий в принтере в виде очереди с приоритетами. Задание будет попадать в нее при поступлении и исчезать при завершении печати последней страницы из него. Тогда любое изменение в очереди происходит по наступлении одного из двух событий: какое-то задание поступило или какое-то задание закончило печататься. Между двумя последовательными такими событиями принтер просто печатает страницы из наиболее приоритетного задания. Поэтому, если мы будем поддерживать set событий, то весь процесс печати можно смоделировать за O(NlogN).

Теперь решим исходную задачу. Сделаем очевидное наблюдение: чем выше приоритет у задания, тем раньше закончится его печать. Тогда приоритет, который мы ищем, может быть найден бинарным поиском. Осталось лишь заметить, что существует всего O(N) значений приоритета, среди которых нужно искать. Итоговая сложность решения — O(Nlog2(N)).

Отмечу, что у этой задачи есть и решение за O(NlogN), которое я напишу позже.

Разбор задач Codeforces Round 154 (Div. 2)
  • Проголосовать: нравится
  • +40
  • Проголосовать: не нравится

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

Fast editorial :) Thanks!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

the second problem can be also solved by sorting and performing a binary search for every 1<=i<=N in O(nlogn) time

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

the second problem can be also solved by sorting the sequence and performing a binary search for every 1<=i<=N in O(nlogn) time

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

About the C problem: the greedy observation is simple: a best solution must have the following structure, just simply move the cursor only up or down to some row i, then move to the destination row and directly to the destination column.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

По задаче Д в разборе решение за n^3 * k. n^2 — перебор i и j, n — два указателя, k =26. Разве такое должно проходить? И вообще, хотелось бы поподробнее про 2 указателя.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится

    Видимо, я объяснил не совсем понятно. Если мы зафиксируем пару строк, то для всех символов суммарное количество столбцов в упомянутых списках будет O(N). То есть когда мы решаем подзадачу для конкретного символа, мы проходим только по списку столбцов для этого символа, а не по всем столбцам. Поэтому итоговая сложность решения O(N3).

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I wonder how to use BFS for problem C without getting MLE, I used BFS but got MLE :(

»
14 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

Hello . Can anyone tell me what is wrong with my source ? I can't find it and I know the solution is ok .
2728928

»
14 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Can someone please suggest an improvement for my code for Problem D? I'm getting TLE after implementing the approach mentioned in the tutorial.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

binary search! didn't think of that! very good editorial!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

hey can anyone help me with problem D ? if i consider every subtable it will be 400*400*400*400 and i TLE

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Hi, I want to know when the O(NlogN) solution of problem E available? Or is there any code written in that complexity?

Thanks!

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How do I improve my solution (2820048) to D — Table with Letters — 2? It's getting TLE on test 23.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Everyone should keep it in mind who use "w+"/"r+" in c++ for opening file. http://codeforces.me/blog/entry/11335

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone help me as to why am I getting a run time error in 253 B ( physics practical ) http://codeforces.me/contest/253/submission/9244115

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

My code is running fast enough on my system but codeforces is showing TLE on Test case #1.Plz help. http://codeforces.me/contest/253/submission/11731622

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

My code if running fast enough on my system,still its showing TLE on testcase #1.Plz help. http://codeforces.me/contest/253/submission/11731622

»
10 лет назад, скрыть # |
← Rev. 5  
Проголосовать: нравится 0 Проголосовать: не нравится

A greedy (or maybe brute force) solution for C — Code.

For each row k:
- start from r1, go till k, then go to r2
- move till c2

Choose the k for which the button presses are minimum.

»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In question C, can someone please tell me why this bfs approach is giving a TLE verdict on testcase 10? 60272417

»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In question C, can someone please tell me why the BFS approach in submission 60272417 is giving TLE verdict on testcase 10?

»
6 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How to solve problem B using dp?

»
6 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can't find file K:\ramdisk\codeforces62\e7ff8bb91dedde9a6d865f706e191786\check-2a7006f85105f62668272971b6545418\run\output.txt invokerId=6f6b8c9223c03ef07c62571aa9bbddf5, location=2032792129

Does that mean tests are removed ?

»
4 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

This problem also has O(NlogN) solution, which will be described later.

Ten years passed. And it still was not described? I solved the problem in $$$O(NlogN)$$$ but don't sure if it is correct.

»
20 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How can we solve problem E in the complexity $$$O(n \log n)$$$ ?