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

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

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
  • Проголосовать: не нравится

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    и вообще, число кратно 2, если i последних цифр числа кратно 2i
»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
как решать Ciel and Quiz Game?
  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 5  
    Проголосовать: нравится +5 Проголосовать: не нравится

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

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    У меня прошли оптимизации. То-есть зафиксим какое-то решение, и попытаемся его улучшить, и так пока можем.
»
14 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

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

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

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

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Could you share the testcase my solution fails on Random Walk?
  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 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.
    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Nevertheless, the only accepted solution for this problem uses Gaussian elimination.
      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 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.
        • »
          »
          »
          »
          »
          14 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +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.
          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 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.
          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 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. 
  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +13 Проголосовать: не нравится
    I've uploaded a part of (not all) judge cases. http://ideone.com/wuXju

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

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

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

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

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

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

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

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    У меня это получало неправильный ответ на втором семпле
»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

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

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

»
14 лет назад, скрыть # |
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.

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

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -8 Проголосовать: не нравится
    Бу.
  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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 осталась бы больше.