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

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

Сегодня в 20:00 Москвы.

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

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

Как решать 1000?

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

    Раскрасим вершины в 3 цвета: черные, белые в четных строках — назовем "красные", и белые в нечетных строках — назовем "синие". Тогда каждая тройка содержит ровно одну каждого цвета. Теперь понятно какой поток: из истока в красные в черные в синие в сток, с ограничением на пропускную способность вершин.

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

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

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

Хех, один из тестов к 500 (видимо, с челленджей) содержит символы '"' внутри строк. Не говоря уж о том, что строки получились длиннее 47. Валидатор такой валидатор...

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

    Рандомный просмотр history топов, у кого 500 попадала, показывает, что у всех упал этот тест: (под катом)

    Лишь бы не сделали unrated...

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

      Казалось бы, с чего ему быть анрейтэд? На ход coding phase и challenge phase непонятно как могло это повлиять. А если не повлияло — значит наверное не сделают.

      upd. упс, тест же с challenge взят..

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

    Ух ты, это может запросто вызвать рантайм в моем решении.

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

    У меня как раз этот тест упал по Exception.

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

Это неловкое чувство, когда твое решение не проходит ровно 1 тест из 10^18 возможных...

Как доказывается первая? Т.е., как там выглядит стратегия?

И как доказать формулы во второй?

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

    Если мы в нечетной, то второй выигрывает просто повторяя ходы первого. Дальше почти из всех чётных можно пойти в нечётную, значит там первый выигрывает. Остались степени двойки. Если у нас 2^n, то после вычитания чего угодно кроме 2^{n-1} можно пойти в нечетное, поэтому первый так делать не будет и вычтет 2^{n-1}, то есть просто поделит на два.

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

      Понятно, спасибо.

      Да, красиво.

      Интересно, какое соотношение тех, кто придумал стратегию, к тем, кто закодил брут и посмотрел закономернсть?

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

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

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

        Я придумал стратегию, без помощи брута и даже без помощи бумажки. Это вполне делается за несколько минут, хотя конечно медленнее брута.

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

          Очень показательное соотношение численности математиков и программистов среди олимпиадников. Можно иметь в виду при подготовке контестов.

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

            Скорее показатель ленивости. У Petr а скорее всего достаточно мат. скила, чтобы придумать на листочке easy с topcoderа.

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

              Конечно, у многих достаточно. Вопрос не в том, кто может это сделать, а в том, что для человека проще — закодить брут или подумать.

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

расскажите пожалуйста как решалась 500 1 div

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

    Для каждого элемента строки посчитаем, во сколько подстрок он входит (по формуле). А ещё посчитаем вероятность, с которой любой элемент после K ходов останется на месте. Это линейная динамика p[i] считается через p[i-1]. После этого для каждого элемента val[i] его значение — это p[k] * val[i] + (1 — p[k]) * (sum — val[i])/(n-1). Предоставим читателю самостоятельно додумать тонкости реализации.

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

    Например, так: считаем вероятность, что после k шагов на данном фиксированном месте останется то же число, что стояло в самом начале. Это можно сделать за O(k) или за O(log(k)). Дальше всё просто — если в конце на данной позиции стоит какое-то другое число, то вероятность того, что это за число, распределена пропорционально количеству этого числа в последовательности. Поэтому для каждой пары (позиция, число) мы знаем вероятность, а значит, ответ — это понятно какая сумма по линейности матожидания.

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

      Так можно считать не "то же число" а "элемент который изначально стоял на этой позиции". Тогда всё равно какие там числа были, от 0 до 9 или более широкий диапазон.