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

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

Доброго времени суток)

Приглашаем вас на очередной раунд Codeforces #199 для участников Div. 2. Как обычно, участники Div. 1 могут поучаствовать в этом соревновании вне конкурса.

Задачи для вас готовили авторы Павел Холкин (HolkinPV) и Геральд Агапов (Gerald). Традиционно выражаем благодарность Михаилу Мирзаянову (MikeMirzayanov) за системы Codeforces и Polygon, а также Марии Беловой (Delinur), которая перевела условия задач.

UPD: Распределение баллов по задачам будет стандартным500-1000-1500-2000-2500.

Желаем всем участникам удачи, высокого рейтинга и удовольствия от решения задач)

UPD2: итак соревнование завершилось, надеемся вам понравилось)

Поздравляем победителей:

1) chixianglove
2) Logvinov_Leon
3) Yoshiap
4) _moonlight

UPD3: разбор задач можно найти здесь

  • Проголосовать: нравится
  • +86
  • Проголосовать: не нравится

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

Почему вы решили провести соревнование утром?

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

Thanks for the contest!
But Why is the name of Author orange(Master) on the title and purple(Candidate Master) in the text??

Here Master↓
---------------------------------------

---------------------------------------


and here candidate master↓
---------------------------------------

---------------------------------------

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

some copy-paste) fixed

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

You may want to warn everybody about unusual contest time :)

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

Good Morning (:|

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

А будут ли доступны тренировки параллельно с раундом?

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

is this contest difficult? gonna to see the problems you prepared! and waiting for the score distribution now... hope everybody can enjoy this contest and get high rating!

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

Sorry to ask, but is this a rule that there will never be an intersection between CF & TC contests?

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

Good time for Chinese participants:)

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

А-шка и Е-шка — 2 обидных фэйла за 1 контест :( Когда же я исправлюсь?

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

most of the solutions in problem C is wrong. check it: 11 21

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

Вопрос по задаче C: почему идея: распихать по два шарика во всю высоту и один сверху, если h%r == 0, а иначе по два шарика в высоту прямоугольника + 2 не проходит? код:

answer = 0LL;
answer = (h / r) * 2LL;
if(h % r == 0)
{
  answer++;
}
else
{
  answer += 2LL;
}
  • »
    »
    13 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    См. ветку выше про 8 7.

    Идея в том, что если запихать оставшиеся 2, то может остаться место на ещё один посередине.

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

    Условие для одного сверху другое. Я пихал по два шарика пока влезает, и потом проверил, можно ли поместить еще 1 сверху.

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

    Потому что стратегия "распихать по два шарика во всю высоту и один сверху, если h%r == 0" может быть выгодной не только в условиях h%r==0. Кроме того, если пихать "по два шарика в высоту прямоугольника + 2", нам может не хватить места, т.к. за высоту надо в таком случае брать h-r/2.

  • »
    »
    13 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +4 Проголосовать: не нравится

    Шары снизу могут выпирать вверх ещё на .

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

Can someone find the problem in following logic for A? There are only 3 possibilities: (1 2 4), (1 2 6) and (1 3 6). So I simply read the input find counts for numbers 1 to 7. Let say that combination 1 2 4 is there a times, 1 2 6 b times and last c times. From counts I can calculate a as number of 4s, c as number of 3s and b is number of 6s — c. At the end I calculated counts for used possibilities and checked against input, but got WA.

edit: it failed, because I didn't checked that b is non-negative :-/

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

i dont get the point in C, some one help?

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

some helps with C? i dont really get it.

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

Как делать Е?

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

    Sqrt декомпозиция по запросам. Обрабатываем их группами. В конце каждой группы запускаем бфс, который пересчитывает расстояния. В резутьтате мы учтём все вершины кроме добавленных в последней группе. Их не больше корня. Расстояния до них можна считать при помощи лца. Решение за N*sqrt(N)*log(N) можно избавиться от лог при помощи Тарьяна, но это не требовалось.

  • »
    »
    13 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +18 Проголосовать: не нравится

    Ну можно sqrt-декомпозицией по запросам за O(N*lg(N)+sqrt(M)*(M+N)): Каждые sqrt(M) запросов пускаем БФС/ДФС и находим для каждой вершины ближайшую покрашенную, а в одном блоке нам просто нужно уметь находить расстояние между двумя вершинами в дереве, что делается с помощью LCA.

    N*lg(N) у меня, потому что я что-то испугался LCA за lg(N) искать, поэтому Sparse Table построил.

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

      не очень понятно как учитывать покраску вершин внутри запроса. Т.е. обрабатываем блок длина sqrt(M). В этом блоке есть запросы 1 и 2 типа. И как так 1 раз запустить dfs/bfs, чтобы учесть покраску?

      • »
        »
        »
        »
        13 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится +1 Проголосовать: не нравится

        BFS: Стартуешь не из одной какой-то вершины, а сразу из всех покрашенных. То есть красишь вершины из блока, затем все покрашенные закидываешь в очередь и ставишь им расстояние 0, ну а дальше как обычно.

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

          но в момент, когда просили дать ответ для вершины "A", вершина "B" могла быть еще не покрашена. А если начать из всех покрашенных, то получается, что сначала все вершины покрасили, а потом уже отвечаем. видимо, я что-то не так понимаю. :)

          • »
            »
            »
            »
            »
            »
            13 лет назад, скрыть # ^ |
            Rev. 2  
            Проголосовать: нравится +1 Проголосовать: не нравится

            А, понял вопрос.

            Ну ты хранишь ещё не покрашенные вершины где-нибудь, и тогда ответ на запрос состоит из двух частей:

            1) Смотрим ближайшую покрашенную до начала блока, это мы BFS'ом нашли.

            2) Пытаемся улучшить ответ, учитывая что в блоке что-то покрасилось. Улучшить = найти расстояние между двумя вершинами в дереве.

            Это то можно делать, если уметь находить LCA, тогда расстояние: (heights[u]-heights[lca])+(heights[v] — heights[lca])

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

        Ты хранишь все вершины покрашенные в этом блоке, проходишься по ним и улучшаешь ответ. Расстояние считаешь при помощи лца.

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

    Есть решение за O(N * log^2 N). (На контесте не зашло из-за тупого бага, в дорешку сдал). Идея: построим heavy-light декомпозицию. Для каждого пути построим дерево отрезков на максимум для величины 2 * h[v] — f[v](v — вершина, h[v] — расстояние от корня, f[v] — минимальная высота по всем красным вершинам — потомкам данной). Запрос на обновление — обновляем все на пути от вершины до корня. Ответ на запрос второго типа = h[v] — best, где best — наибольшая из величин 2 * h[v] — f[v] на пути от вершины до корня дерева.

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

Any ideas for solving E?

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

А почему в В не проходит решение "в лоб"?

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

My code gave TLE with cin for T,L,R and gave Accepted in practise when I used scanf for the same.. :-/ Isnt it a bit harsh..??

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

my silly mistake in B : could not realise that f could be smaller than s. so stuck with wrong answers on pretests even.

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

Когда обновится рейтинг?

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

Spent 2 hours only on problem D and finally got accepted...just 1 min before the contest ended.

I think the problems are harder than usual div.2 contests.

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

Мне одному кажется, что в B было весьма мутное условие?

Как по мне, то ни по условию, ни по примеру так и не было понятно, то ли шпионы передают записки в каждый целочисленный момент времени, то ли только на тех этапах, которые упомянуты во входных данных.

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

i had advanced to Div-1 in the last contest, but i would still have liked to take part in this one unofficially. unfortunately missed it due to the unusual time and because Codeforces decided not to send a mail to its users! :/ please make sure this doesn't happen again! :)

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

Very weak pretests for task C.

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

The test data for task E is too weak. Many solutions only used brute force BFS which would fail on most tests where the tree's height is big ( e.g. form a string ).. but the system test didn't include any of these cases. What's more many O(n^2) brute force even ran faster than my O(n\log^2 n) solution, while some O(n\sqrt n) solution got TLE or MLE.. Just a remind to the task setter.. Don't just use complete random data when designing test cases.. Think about possible "strange optimization" for brute force and designing test cases against them is very necessary, since passing system test with brute force is unfair to the ones who wrote complicated correct solution and to those who didn't write brute force.

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

Can someone please explain problem D 's solution to me ? I am not able to understand the solution from the editorial.

Thanks

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

can anyone explain more the idea of the problem E (other ideas than heavy light decomposition)