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

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

Напоминаю, что в 01:00 MSK состоится Round 2.

top 100 выходит в Round 3 и получает футболки.

Ссылка

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

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

И сразу вопрос: можно ли сменить настройки часовой зоны в FB, так чтобы во event'ах отражалось местное время

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

ссылку можно?

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

Три задачи будет?

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

Меня вообще печалит что в Facebook'е на футболки скупятся. У них же огромный запас ещё с 2011 года должен был остаться, когда обещали 300, а раздали 150, потому что никто больше ничего не решил...

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

А почему пост написан 12.12.2012?

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

Сейчас по ссылке "Запрашиваемая вами страница не найдена." Это из-за того, что я не допущен до 2-ого раунда ?

UPD: Ссылка на таблицу работает.

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

Если это не является нарушением правил, может ли кто-нибудь объяснить почему в пятом тесте второй задачи (про роботов) аж 60 туров, если роботы такие умные? По мне так кажется, что только 15 роботов, которым не грозит утилизация могут откосить, остальные, обладая сообразительностью, могут догадаться, какая их ждёт судьба, тем более, что второй пример как раз об их догадливости. То есть раунд должен бы состояться всего один.

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

Ну вот я уже всё решил... И чего это раунд такой длинный?

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

    не, у меня другой вопрос... почему еще не все всё сдали?

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

      У кого-то time expired по третьей((

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

      turi muti

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

      кому твои яйца надо было сдать.

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

      Codeforces, такой codeforces. Тут всегда минсуют заявления оранжевых и красных о том, что всё было тупо, или даже если содержится хоть малейший намёк на то, что всё было тупо. Просто потому, что сине-зелёных гораздо больше.

      И, в общем-то, правильно. Конечно, зависть — плохое чувство, но, всё же надо понимать эмоции людей, для которых пройти во второй раунд было уже достижение, и которые с трудом сдали 1 задачу, и это для них прогресс — многие просто потому, что опыта мало, или просто регион такой, что учить толком некому. Таких людей надо поддерживать и вдохновлять, а не демотивировать...

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

Расскажите, пожалуйста, как решать третью.

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

    UPD: не зашло

    Ясно, что дано дерево. Решим задачу для поддерева для каждого числа, стоящего в корне (от 1 до размера поддерева).

    Будем добавлять по 1 ребенку, перебирая, какое текущее значение у корня. Рассмотрим 2 случая — больше мы или меньше. Помутим преф.суммы для быстрого добавления всего отрезка.

    Итого какой-то куб.

    Код

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

    В инпуте нам дано дерево, на каждом ребре которого записан порядок следования его концов в конечной перестановке. Будем делать динамику по поддеревьям. Пусть f(v, pos) — количество способов разместить поддерево вершины v так, чтобы она стояла на позиции pos. Научимся ее пересчитывать через детей. Для этого заведем динамику g(k, m1, m2), которая говорит, сколько способов расставить первые k детей так, чтобы среди тех, которые должны стоять перед нашей, самый правый стоял на позиции m1. Аналогично, среди тех, которые должны стоять после нашей, самый левый стоит на позиции m2. На самом деле, эту трехмерную динамику можно разбить на 2 двухмерных (для двух типов детей) и в конце посчитать ответ через них. Если переход в двухмерной динамике делать за линию, то в сумме выйдет решение за куб. На всех 20 тестах отрабатывает меньше, чем за секунду.

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

      Легче сделать так: сначала добавляем ребро к ребёнку, берём частичные суммы сначала или с конца смотря больше он или меньше, а уже потом объединяем его с поддеревом. Тогда формула получается симметричной. Если надо объединить таблицы A[pos] и B[pos] в таблицу D[pos] то формула выходит:

      for (i=0;i<A.len;i++)
         for (j=0;j<B.len;j++)
             D[i+j] += A[i] * B[j] * C[i+j][i] * C[C.len-(i+j) - 1][A.len-i-1]
      

      Первая C-шка это расстановка элементов меньших корня поддерева между собой, а вторая — больших.

      Это, как нетрудно догадаться, квадрат :)

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

        Ну в общем-то у меня примерно так и реализовано. Только я всегда считал, что это куб.

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

          Каждое объединение делается за O(N1 * N2) где Ni это количество вершин в поддереве. Можно считать что ты объединяешь каждые две вершины в них. Объединение двух вершин происходит только один раз — в их LCA. Всего пар вершин N * N. Отсюда квадрат :)

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

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

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

А никто исходники не выложит сравнить результаты?

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

А в 3, небось, подразумевалось n^2*log(n) с БПФ =)

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

Такой вопрос, какой код правильнее:

 
if (p > per)
    lf = mid + 1;
else
{
    ans = mid;
    rg = mid — 1;
}
 

Или

 
if (per > p || fabs(p — per) < eps) {
    ans = mid;
    rg = mid - 1;
}
else
    lf = mid + 1;
 

Дело в том, что вторая задача с первым вариантом с одной погрешность падает, с другой все ок. С первым вариантом тоже все хорошо. Но вот можно ли всегда так обходить использование eps (просто перейти к нестрогому неравенству)?

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

    Правильнее делать в целых числах:)

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

      ну это само собой. :)

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

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

    Где там бинпоиск во второй?

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

      Ну можно было длину блока (по k роботов), которые будут голосовать вместе за спасение своих железок, а так же кол-во блоков одинаковой длины бинпоиском.

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

        Я тоже длину одного блока искал бинпоиском. А вот количество одинаковых блоков можно было и не искать. Там их все можно было пройти в цикле. У меня вышло, что всего блоков было порядка нескольки тысяч на максимальном тесте.

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

          Можно было решать с другой стороны и не делить, а умножать. В конце останется N%K роботов (или K если остаток 0), все они не голосуют. Пусть на каком-то шаге есть X неголосующих роботов. Считаем сколько блоков голосующих роботов надо добавить чтобы выборы состоялись, пусть при этом роботов станет Y. Если Y > N то ответ (N - X) / K + 1 . Если нет — считаем X=Y, так как все эти роботы теперь в безопасности. При P=100 считаем Y очень большим.

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

            Ну я про это и говорю. Просто количество блоков голосующих роботов можно было искать формулой, а можно и бинпоиском. Ну а количество раз, которое мы берем текущее число за новое X получается несколько тысяч. Если бы было много, то нужно было бы делать еще один бинпоиск или более извращенную формулу выдумывать.