Блог пользователя anup.kalbalia

Автор anup.kalbalia, 13 лет назад, По-английски

CodeChef invites you to participate in the December CookOff at http://www.codechef.com/COOK17

Time: 2130 hrs 18th December 2011 to 0000 hrs, 19th December 2011 (Indian Standard Time - +5:30 GMT)
Details: http://www.codechef.com/COOK17/
Registration: Just need to have a CodeChef user id to participate. New users please register here
Problem Setter: Hiroto Sekido (LayCurse)
Problem Tester: Jingbo Shang (shangjingbo)

It promises to deliver on an interesting set of algorithmic problems with something for all.
The contest is open for all and those, who are interested, are requested to have a CodeChef userid, in order to participate.

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

»
13 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится
All problem statements are empty =(
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +31 Проголосовать: не нравится
    Statements are for noobs
  • »
    »
    13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится -53 Проголосовать: не нравится

    с условиями и дурак сдать может, а без условий слабо?))

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

      1 min ago    shindann...    Ciel and A-B...    C++ 4.3.2

      вот парниша последовал моему совету

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    Not the first time when such things happen. Also, there is another bug - status of this contest is "Ended" at the home page .

»
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Ciel and New Menu  расскажите пожалуйста как решать...
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Число кратно 8 если 3 последних цифры кратны 8и, из этого выходит простенькая реализация за один проход.
    • »
      »
      »
      13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      На Java нужно было как-то хитро читать? У меня постоянно был TLE.. Код здесь 

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

        Извините, а где у вас откидываются ведущие нули?

        У вас он по-моему вообще не перестает считывать. Почему просто всю строку сразу не считать было?

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          >Извините, а где у вас откидываются ведущие нули?
          В задаче нигде не сказано, что строка может приходить неправильно сформированной. 00001 - неправильная строка

          >У вас он по-моему вообще не перестает считывать.

          Если посмотрите спецификацию метода, то он будет считывать до последнего символа и возвратит -1 в конце чтения.

          >Почему просто всю строку сразу не считать было?
          Считывать онлайн намного эффективнее, нежели чем читать всё, затем бежать по строке заново.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну строка то она правильная вообще-то (в условии сказано про другое)
            И даже если судить по вашему то изначально может быть что-то вроде 10008
            И для этой строки будет ответ 6 (это строки 0, 0, 0, 8, 1000 и 10008, а такие строки как 08, 00 и 000 учитывать не надо)

            -1 то разве дождется он при стандартном input'е? Если бы был файл тогда понятно
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            >Ну строка то она правильная вообще-то (в условии сказано про другое)
            Тогда я не понял вашего выражения "
            Извините, а где у вас откидываются ведущие нули?". Строка "00001" не будет являться правильным вводом для этой задачи, соответственно, я не откидываю ведующие нули.

            >-1 то разве дождется он при стандартном input'е? Если бы был файл тогда понятно
            На стандартный ввод подаются конечное количество символов, когда символов нет, read() возвращает -1. Не вижу в чём здесь сомнения. Я всегда тестирую, подавая на ввод файл:

            type test | java -cp bin Main
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Строка 00001 является правильным вводом и ответ на нее 4 (0 0 0 0)
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Зачем тогда писать "Извините, а где у вас откидываются ведущие нули?" :-)
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну я понял ваша программа 00 и 000 посчитает за правильные варианты
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Да, такие ситуации не обрабатываются. Только не понятно, откуда вы взяли, что такого типа данные будут вводиться в программу?
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится
            Ну потому что по условию строка состоит из цифр (и нигде не сказано, что нулей подряд идущих не будет)
            И как в одном из моих первых сообщений вариант тоже вполне реален.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Не ясно, почему если 00001 - это правильно, то 0000 - это неправильно :-) Вроде, логично либо оба считать неправильными либо оба правильными :-)
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится
            Оба варианта ввода верны
            Просто при подсчете возможных вариантов и в первом и втором варианте должно получится 4
            (то есть 0 0 0 0 в обоих случаях)
            Сам вариант 0000 при вводе 0000 (и при 00001) не верен
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            ты споришь так, как будто ты ее сдал и у тебя абсолютно правильное решение.

            тебе человек пытается растолковать, в чем ты не прав, а ты все равно усираешься, что прав

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится -8 Проголосовать: не нравится
            я с вами на брудершафт не пил, чтобы вы мне тыкали. Это первое. Второе, вас никто не просил вмешиваться в абсолютно не касающийся вас разговор.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            ну если разговор такой приватный, то пожалуйста в ЛС, а раз уж в форуме пишете, то не возмущайтесь

            от того, что я к тебе на "ты", суть моего сообщения не меняется

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ок, это понятно. В общем можно считать, что оба варианта возможны как ввод, тогда нужно считать аккуратно все числа. Теперь становится понятным, что вы имели ввиду под "Извините, а где у вас откидываются ведущие нули?" :-)
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            и вообще, к критике надо относится спокойней, а то развели тут холивар, и ввод некорректный, и условие некорректное...
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну вы не указывайте, что и где нам писать. Если не врубаетесь в суть разговора, то перечитайте несколько раз.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

            Ну вы не указывайте, что и где нам писать. 

            чья бы корова мычала, а ваша б молчала

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    и вообще, число кратно 2, если i последних цифр числа кратно 2i
    • »
      »
      »
      13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Это кажется неправильно. Число кратно 2^i если k последних цифр кратно 2^i, где k - наименьшее число что 10^k делится на 2^i.

      UPD: Понял это одно и тоже

»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
как решать Ciel and Quiz Game?
  • »
    »
    13 лет назад, # ^ |
    Rev. 5   Проголосовать: нравится +5 Проголосовать: не нравится

    Оказывается, максимум достигается, если взять первые несколько задач и последние несколько задач (по величине вероятности). Получается алгоритм со сложностью O(N*logN + K*K).
    Но там проблемы с делением на ноль, поэтому я закодил совсем в лоб за (N*logN + K*K*K).
    Обоснование: Пусть все задачи фиксированы кроме одной, тогда по ней ответ это линейная функция, поэтому максимум достигается на границе, поэтому выгодно ее брать первой или последней из не выбранных.

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Блин а я писал meet-in-the-middle и вагон геометрии, так и не прошла пока
      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится -12 Проголосовать: не нравится
        вагон геометрии? ничего не перепутали?
        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится
          А что тут можно перепутать? Если решать через meet in the middle, то придется для текущего элемента <X, Y>, искать в другом множестве такой элемент <A, B>, что AX + BY максимально. Иначе никак.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Можете подробней эту идею сказать :) Заранее спасибо!
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится -8 Проголосовать: не нравится
            а точно, на самом деле я тоже самое и придумал, просто не прикрутил это к геометрии
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Именно так
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            А как вы пытались максимизировать это геометрически?
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится +8 Проголосовать: не нравится
            Есть n прямых и m точек (и тех и других до кажется до 60000) для каждой прямой нужно найти самую далекую от неё точку. Это стандартная задача. Строим выпуклую оболочку для точек. Сортим прямые по полярному углу. А потом идем циклом по прямым и двигаем указатель.
      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        Аналогично, блин)
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня прошли оптимизации. То-есть зафиксим какое-то решение, и попытаемся его улучшить, и так пока можем.
»
13 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

подскажите пожалуйста что не так я делаю в задаче Ciel and Quiz Game. Код здесь. 

Уже понял почему не верно.

»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Кто решил Ciel and Battle Arena, дайте пожалуйста пару ответов на маленькие тесты (второй семпл - для меня большой тест).
»
13 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Кто может объяснить почему здесь(задача про Random Walk) падает assert на то что у гаусса все получилось? Казалось бы такое может быть только если нет пути в N, но assert на то что он есть не падает. Они выкладывают тесты потом?

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Очень похоже, что там какие-то жуткие проблемы с точностью... По крайней мере, мои дебаг-сабмиты об этом говорят.
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Хм. Возможно. Но у меня стресс за 30 минут не нашел тест где падает assert.
»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Could you share the testcase my solution fails on Random Walk?
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Never mind, I've read the editorial and the part that Gaussian elimination is not supposed to pass. It's strange that the assertions that verify that the Gaussian elimination error is not big do not fail in my solution, though.
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Nevertheless, the only accepted solution for this problem uses Gaussian elimination.
      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        I don't know how he avoids float point round-off errors, but this is not the weirdest part. With a simple idea(try to calculate answer for each node with flower, and reduce size of matrix to 2n), there is a O(n^4) approach, instead of his O(n^6) one.

        Anyway, since the writer's approach is iteration with O(n^5 logn) complexity, O(n^6) is not that bad. The weirdest part is that he solves such big matrix(500x500) correctly with double, but for 60x60 matrix all other participations get WA. It seems that he didn't use some particular technique to avoids errors.

        B.T.W. I think the gauss eliminations can be optimized further to an O(n^3) approach, with BigDecimal, it's solvable theorically.
        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится +5 Проголосовать: не нравится
          The solution I was trying to submit during the contest has the complexity O(N^3). It gets WA, as expected. However, I haven't tried to submit it with BigDecimals.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            I think maybe your method is what I'm considering: do gauss elimination twice, first time to remove all non-flowered nodes, right?

            I think with O(n^3) complexity, it's enough even to implements a Fraction class with BigInteger.
          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Yes, I do Gaussian elimination twice: on the initial graph and on the graph without flowered nodes.
            Maybe I should have tried to implement a Fraction class. 
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +13 Проголосовать: не нравится
    I've uploaded a part of (not all) judge cases. http://ideone.com/wuXju

»
13 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
меня одного удивляет: 36.gennady.korotkevich
»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Глупый вопрос наверное, но почему такое не работает в Battle Arena: храним для каждой позиции вероятность выигрыша p и проигрыша q, начиная из неё, максимизирующие p / (p + q)?

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

    Так так и можно, по сути. Предполагаем, что в f(0, 0, 0) лежит число p. Делаем именно такую динамику наверх по ma, va, vb, получаем f(ma, va, vb) и приравниваем к f(0, 0, 0). То же с тернарным поиском по величине ответа получило в моей криворукой реализации ТЛ :(

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

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

    P.S. Вопрос отменяется, если речь идет о решении, которое использует бинарный или тернарный поиск.

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня это получало неправильный ответ на втором семпле
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да у меня тоже =) Просто хочется понять в чем ошибка такой логики.
      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Ну, например, нельза сравнивать 0.5, 0.5 и 0.25, 0.25 - какая из этих позиций лучше зависит от ответа
»
13 лет назад, # |
Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

А где эти задачи дорешать можно?

UPD: Нашел. Забавно они задачи с контеста по разным местам раскидывают.

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

Никак не пойму, откуда следует утверждение, обосновывающее корректность бинпоиска в Ciel and Battle Arena:

Let the correct answer be P. If we set dp[a][b][c] = X for a ≤ 0, b ≤ 0, then X ≤ dp[VA][VB][MA] ≤ P or P ≤ dp[VA][VB][MA] ≤ X is hold.

Объясните, пожалуйста.

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится -8 Проголосовать: не нравится
    Бу.
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +21 Проголосовать: не нравится
    Если раскрыть скобки во всех операциях max, то видно, что dp[a][b][c] (для любых A,B,C) - это максимум из какого-то конечного числа линейных комбинаций с суммой коэффициентов 1 чисел 0 (мы слили), 1 (мы выиграли) и X (переигровка). При этом при X=P dp[VA][VB][MA]=P. Тогда, при X>P dp[VA][VB][MA]>=P получается просто из той же самой линейной комбинации, на которой достигался максимум при X=P, а dp[VA][VB][MA]<X получается из того, что все линейные комбинации имеют коэффициент при X меньше единицы (так как всегда есть ненулевой шанс что кто-то выиграет). При X<P dp[VA][VB][MA]>X получается из той же линейной комбинации, на которой достигался максимум при X=P, а dp[VA][VB][MA]<=P получается из того, что все эти линейные комбинации монотонно неубывают, поэтому если бы какая-то при меньшем X была больше P, то и при P осталась бы больше.