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

Автор aropan, 15 лет назад, перевод, По-русски
Начала 4 июня (сб) в 18:00 по Москве.
  • Проголосовать: нравится
  • +37
  • Проголосовать: не нравится

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

Мг :) крутяк :)

хотя бы в 1000 попасть)))

15 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится
С одной стороны - круто, что футболок в этом году аж тысяча, многим дополнительный стимул. С другой стороны - получается, футболки опопсели:)
15 лет назад, скрыть # |
 
Проголосовать: нравится -6 Проголосовать: не нравится
Поясните case #2 в задаче А.
15 лет назад, скрыть # |
 
Проголосовать: нравится -70 Проголосовать: не нравится
гавно, а не раунд
15 лет назад, скрыть # |
 
Проголосовать: нравится -58 Проголосовать: не нравится
как решать 1ю?
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Расскажите условие D, пожалуйста

UPD: спасибо
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    Условие?

    Дан граф, нужно найти минимальный путь из 0 в 1 с максимальным количеством вершин "на расстоянии в один ход(в которые можно попасть из какой-нибудь вершины пути за один переход)" от этого пути
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    Нужно найти кратчайший путь из вершины 0 в вершину 1, чтобы множество вершин, смежных с вершинами этого пути, было как можно больше.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    а лучше - решение...)
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +16 Проголосовать: не нравится

      Дийкстра обычная. Весом будем считать длину пути * 1000 минус количество вершин, которым мы угрожаем. Понятно, что для очередной вершины на пути множество вершин, которые она атакует, может пересекаться только с множеством для предыдущей вершины, и для позапредыдущей (если бы оно совпадало с поза-поза-предыдущей, то это было бы странно -- это бы означало что между ними есть путь длины два, а на нашем кратчайшем пути они на расстоянии три).

      Отсюда граф состояний, где состояние -- текущая вершина и предыдущая (состояний не более 4000), при переходе смотрим сколько добавляется вершин под угрозой -- количество вершин, которым угрожает новая вершина, и не угрожает последняя и предпоследняя.

       

       

15 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
Контест интересный, несмотря на то, что футболочку я не выиграл :(.
А всё из-за того что, в первой задаче время которое можно бежать у меня было int и при вычитании не целых величин всё было плохо. Как результат задача решенная на 30-ой минуте была сдана в 2:10 и шансов закодить что-нибудь ещё не осталось.
Мораль: будьте внимательны :)

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

Почему могло не зайти тупое решение на D-small:
  1. Нашли BFS'ом кратчайшее расстояние
  2. Далее перебрали все кратчайшие пути (идём по ребру, только если db = da + 1, где a и b - концы ребра, а di - кратчайшее расстояние от нашего дома до вершины i) "в лоб" и посчитали вторую величину.
  3. PROFIT Oops, wa...
?
Код

Нашёл баг. Был специфичным: не проверял в переборе условие, что мы достигли вершины компа за минимум (опустил проверку последнего ребра в пути).
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Блин, C.large после C.small такой капитан, а я не сдал(
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +3 Проголосовать: не нравится

Подкажите правильный результат на B-large, пожалуйста:
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Странно как-то, на Small правильный ответ, на Large полную фигню.
      Спасибо за помощь, пойду баг искать.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      я так понимаю моё решение B-large упало из-за точности double.

      как правильно решать эту задачу?

      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Там только деление на два в формулах -> можно решать целочисленно.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          в каких формулах деление на два? очевидно у меня не такие формулы, иначе бы не спрашивал :)
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Ну я делал так. У меня были матрицы a[i][j] исходных данных, h[i][j]=a[i][j]*j и v[i][j]=a[i][j]*i, а также их частичные суммы. Выделяем квадрат со стороной r, левым краем x и верхним y. Сумма h по квадрату будет учитывать координату y первого столбика с коэффициентом y, а должна с коэффициентом y-(y+(r-1)/2). Значит к этому значению надо прибавить значение суммы a на квадрате с коэффициентом (y+(r-1)/2). Получим координату x центра масс. Также со второй координатой.
            • 15 лет назад, скрыть # ^ |
              ← Rev. 2  
              Проголосовать: нравится 0 Проголосовать: не нравится

              наверное h[i][j] это не число a[i][j] * j

              а некоторая структурка с массой a[i][j] и координатой j? иначе я вообще не понимаю о чем речь. если это структура, то координата при их сложении становится дробной. если дробь сделать втупую на long long то должно переполнится, я придумал изрвать чтобы не переполнилось. но как вы говорите решать в целых числах я так и не понял.

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

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

                Нет, все правильно, именно число. 1) Заметим что координаты центра масс можносчитать независимо друг от друга. 2) координата i считается по формуле sum(aij *i) / sum(aij) Обе суммы у нас досчитаны, поэтому сравнить координату с нужной полуцелой можно в целых числах
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится -8 Проголосовать: не нравится
                Нет, просто число. Чтобы посчитать центр масс по горизонтали, надо складывать суммы в столбцах с коэффициентами (-r/2),(-r/2+1),...,0,...,r/2. А у нас есть суммы с коэффициентами x,x+1,...,x+r. Поэтому их надо нормировать. Чтобы сдвинуть все на 1, надо прибавить к ответу просто сумму в квадрате, тогда столбцы будут с коэффициентами x+1,...,x+r+1. Вы почитайте мое решение, может, вам понятнее будет.
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится 0 Проголосовать: не нравится
                  Мое решение отличалось только тем, что в функции я передавал (l, t, r, b) :) там набаговать меньше шансов, вроде, потому что сразу можно r и b смещать на 1
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
У меня два вопроса:
1. Все решения уже проверили или ещё ожидается проверка
2. Сколько человек проходит в следующий раунд
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    1. вроде как все проверили
    2. 500
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Блииин я не попал с следующий раунд(((
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +8 Проголосовать: не нравится
        если это тебя утешит, то я тоже не попал(
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          К сожалению нет((
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +18 Проголосовать: не нравится
            меня тоже не утешает то, что я не попал))
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится +5 Проголосовать: не нравится
              может тогда вас обоих утешит тот факт, что я даже футболку не получу? ;)
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится +7 Проголосовать: не нравится
                Вот это точно не утешит, ты и без майки.... Надеюсь за хорошие статьи тебя оценят и трофей спортивного программирования найдет своего героя.
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +10 Проголосовать: не нравится
                  переквалифицируюсь в журналисты, пока не поздно ;) может меня хотя бы трофей блоггера найдёт =)

                  спасибо за сочувствие :)
                  • 15 лет назад, скрыть # ^ |
                     
                    Проголосовать: нравится +6 Проголосовать: не нравится
                    Я тоже за 1000, epic fail :)
                    • 15 лет назад, скрыть # ^ |
                       
                      Проголосовать: нравится +1 Проголосовать: не нравится
                      предлагаю создать клуб неудачников GCJ =)
                    • 15 лет назад, скрыть # ^ |
                       
                      Проголосовать: нравится +5 Проголосовать: не нравится
                      Я с вами если что...
                      • 15 лет назад, скрыть # ^ |
                        ← Rev. 2  
                        Проголосовать: нравится +5 Проголосовать: не нравится

                        =================
                        И я тоже с вами. Четыре раза участвовал в GCJ, все четыре не смог войти в топ-500 (и да, сейчас я даже майку не получил).
                        Формат слишком уж отличный от ACM и TopCoder, тут тактика совсем другая нужна, а какая - не знаю.
                        • 15 лет назад, скрыть # ^ |
                           
                          Проголосовать: нравится +4 Проголосовать: не нравится
                          ========================
                          По-моему, почти ничем не отличается от формата ACM. Разве что баллами - но это даже более справедливо
                          • 15 лет назад, скрыть # ^ |
                            ← Rev. 2  
                            Проголосовать: нравится +8 Проголосовать: не нравится

                            ===========================
                            Да ну?
                            Эта задача вроде проще, но она и дешевле стоит, чем другая, - так какую же мне решать?
                            Я знаю, как решать для маленького теста, так стоит ли мне думать над большим или же решить для маленького с тем, чтобы переключиться потом на маленький для другой задачи?
                            И, наконец, вот здесь я знаю решение, про которое мне интуиция, наработанная годами игры по другим форматам, подсказывает, что в две секунды оно не уложится, но уложится ли в две минуты? стоит ли писать?
                            И даже если я могу точно оценить, что в худшем случае моё решение не уложится в восемь минут, насколько близок будет большой тест к худшему случаю, к тому гипотетическому, где все кейсы - одинаковые и самые плохие?
                            Все эти вопросы не возникают, конечно, если ты точно можешь решить все задачи, и так решить, что наверняка уложишься в TL. Но я ведь простой смертный.
                        • 15 лет назад, скрыть # ^ |
                           
                          Проголосовать: нравится +1 Проголосовать: не нравится
                          ==================
                          Я лично просто читаю+решаю задачи тупо подряд, и, если есть больше часа, сразу на Large.
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится -9 Проголосовать: не нравится
                Я первый раз в жизни участвовал. Получилось плохо. Я все время как какой-то ненормальный в суете еле как сдавал даже самые простые задачи. Сегодня до последнего дебажил B-Large написанную в целых (чтобы уж наверняка) и за 53 секунды до конца послал. Это не принесло мне выхода в следующий раунд, зато принесло футболку. 
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +6 Проголосовать: не нравится
                  первый раз в жизни? а как ты отборочный прошёл? =)

                  мои поздравления, с футболкой вас :)
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +8 Проголосовать: не нравится
                  Молодец.
                  Чую, если б ты не получил футболку, не миновать срача на тему "синие да зеленые повылазили" ^__^
                  • 15 лет назад, скрыть # ^ |
                     
                    Проголосовать: нравится 0 Проголосовать: не нравится
                    Не вижу никакой связи. GCJ - это соревнование, совершенно непохожее на TopCoder, CF, ACM ICPC и так далее. Я не знаю почему, но мне не удавалось быть спокойным в течение всех трех моих раундов. Все время суетился почему-то. Даже на самом тупом квале, где только ленивый не набрал 100 очков, я до последнего проверял свой код и думал, что у меня что-то там может упасть.
                    Да такого игрока, как я на GCJ, можно и нужно побеждать. Я таким был, когда решал свои первые раунды на TopCoder'е. Сейчас, на соревнованиях кроме GCJ я гораздо более спокойный и делаю в разы меньше ошибок. А синие и зеленые - это тут, внутри Codeforces, там за его пределами все мы одного цвета.
                    P.S. А что, их на самом деле так много "повылазило" там на GCJ?
                    • 15 лет назад, скрыть # ^ |
                       
                      Проголосовать: нравится +1 Проголосовать: не нравится
                      ===============================

                      Я тоже участвовал в gcj впервые и понял, что здесь надо рисковать. Уверен в алгоритме? Немного поотлаживал? Тогда - сдавай. Если будешь дебажить и тестировать до конца тура, то потеряешь баллы на других задачах. Поэтому - надо рисковать и сдавать.
                      • 15 лет назад, скрыть # ^ |
                        ← Rev. 2  
                        Проголосовать: нравится +14 Проголосовать: не нравится

                        ===============================
                        И я впервые участвовал, но вот волнения не было, скорее наоборот. Я писал так же, как и любой другой контест - по порядку и то, что знаю.

                        По тем ощущениям, что я получил, GCJ - это лучший контест на свете. Мне он очень понравился. Обязательно буду играть каждый год.

                        И да, по-видимому, многие из "клуба неудачников GCJ" решали задачу B вместо задачи C, и из-за этого не прошли.

                        P.S. Я был синим один контест назад и повылазил, это считается? :)
                        • 15 лет назад, скрыть # ^ |
                           
                          Проголосовать: нравится -8 Проголосовать: не нравится

                          ===============================

                          А что реально сложного в задаче B? По моему вполне себе нормальная задача. Хотя С пожалуй более халявная (с точки зрения писать, а не понять условие).

                          • 15 лет назад, скрыть # ^ |
                             
                            Проголосовать: нравится -26 Проголосовать: не нравится
                            ИМХО в ней самый оцтой это переолпение дабла, ну блять давать задачу на то что дабл это недержит это как-то тупо, хоть что говорите. Ну блять ну ладно, реальной жизни бывают такие задачи, но наёбывать на этом во время контеста это дибилизм
                      • 15 лет назад, скрыть # ^ |
                         
                        Проголосовать: нравится +8 Проголосовать: не нравится
                        Не совсем ясно в чем риск проявляется. В любом случае засылать нужно тогда, когда уверен, что код решает поставленную задачу. Риск может быть только в выборе: думать ли над large, если по нему идей сходу нет, или же писать small.
                        • 15 лет назад, скрыть # ^ |
                           
                          Проголосовать: нравится +1 Проголосовать: не нравится
                          ============================
                          На последнем раунде у меня был выбор после сдачи A-Small, A-Large и B-Small: решать B-Large, в решении которой я уверен и осталось только написать или решать C-Small, которую я еще даже не читал. Я выбрал решать C-Small (которая мне так и не далась) и потерял кучу времени из-за чего в конце в попыхах еле успел написать B-Large.
                          • 15 лет назад, скрыть # ^ |
                             
                            Проголосовать: нравится +8 Проголосовать: не нравится
                            Ситуация специфична не только для GCJ. На ACM контесте вполне может быть такое. Знаешь решение на задачу, но не слишком простое + подозреваешь, что другая задача решается быстрее и проще, но ты её не читал)
                            • 15 лет назад, скрыть # ^ |
                               
                              Проголосовать: нравится 0 Проголосовать: не нравится
                              На ACM это несколько компенсируется пятью часами и большей информацией из монитора.
                              • 15 лет назад, скрыть # ^ |
                                 
                                Проголосовать: нравится +9 Проголосовать: не нравится
                                Да ладно, я ведь не хочу доказать, что соревнования равнозначны. Я просто уверен, что побеждает сильнейший. Остальное - нюансы. А если хочется риска - это в покер нужно подаваться.)

                                P.S. Мы с тобой как-то синхронно цвет меняем)) Ты был желтый - я был желтый. Сча оба сиреневые))
                                • 15 лет назад, скрыть # ^ |
                                   
                                  Проголосовать: нравится 0 Проголосовать: не нравится
                                  Да, надо завтра синхронно сменить обратно на оранжевый.
                                • 15 лет назад, скрыть # ^ |
                                   
                                  Проголосовать: нравится +1 Проголосовать: не нравится
                                  =======================
                                  Ваня, ты сам сказал, что независимо от соревнования побеждает сильнейший. Но в каждом виде соревнований есть свой сильнейший. По определению кто-то в чем-то лучше, а в чем-то хуже. Например, Codeforces я решаю более успешно, чем TopCoder. Впрочем, стоит заметить, что сложно что-то решать хуже, чем я решаю TopCoder :)
                        • 15 лет назад, скрыть # ^ |
                           
                          Проголосовать: нравится 0 Проголосовать: не нравится
                          ================================

                          Риск не сдать large, очевидно. Сидишь и думаешь - попробовать сдать или еще потестировать?

              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится
                аналогично))
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    1. Все. Их вроде потом будут вручную запускать и/или ловить читеров сверкой кода, но серьезно это на результаты не повлияет
    2. Наверху же написано. 500 - в 3 раунд, 1000 - футболочки
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    1. Все решения проверяются по ходу контеста. Сравнить два 50kb файлика недолго. Как только контест оканичивается - результаты полные.
    2. 500 человек, вот правила.
15 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится
Отправила по B-large не тот файл (вероятно, это ответ на B-small). Отправленный код генерирует правильный ответ на B-large, однако он (по причинам, не связанным со злым умыслом :) не соответствует файлу output.txt. Меня интересует вопрос, должна ли я как-то уведомить об этом жюри, чтобы они не дисквалифицировали меня совсем?
  • 15 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится +8 Проголосовать: не нравится

    Дисквалифицировать они не будут:
    "If, after the close of any Round, an alleged discrepancy is discovered between the source code and the output file for any of a contestant's submissions that were judged correct during or at the conclusion of the round, a panel of two or more judges consisting of employees of Google and/or its subsidiaries shall examine the source code for all submissions of the contestant for that round. The judges shall determine, in their sole discretion whether a discrepancy exists, and if so whether the discrepancy is trivial or non-trivial. In the event of a trivial discrepancy, the contestant shall be assessed an additional 4-minute penalty for that input/output set. In the event of a non-trivial discrepancy, the contestant shall forfeit all points for that input/output set. In the event the judges rule that there is no discrepancy, no change will be made in the contestant's score for that input/output set and no penalty minutes shall be assessed. "
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится
    Если ты их уведомишь, то, по крайней мере, хуже точно не станет :о)
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится
    думаю исходник им нужен чтобы проверять корректность ответов которые были послала, а если ответ неправильный, то и проверять нечего, так что нормально все, можно и не тревожить.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Блин, поленился написать тупой перебор с суммами в B-Large. Думал, там решение за чистый R*C
Как решать C? А то даже n! неправильно работал, т.к. я неправильно понял что считать за call, а что нет.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится
    В С нижнее число - это число простых не больше n, верхнее - сумма целых частей логарифмов по всем простым основаниям + 1 если n > 1
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Заметим что если зашли люди i1,..,iN, то после них LCM(i1,  iN) - сумма
    Заметим, как мы можем менять его, если мы хотим это делать долго, тогда нужно добавлять по 1 простому, это можно сделать выписав p,p^2 ... p^k для каждого p в таком порядке, потом заметим, что если мы хотим это делать быстро, то нужно  наоборот сразу выписать p^k для каждого p. Заметим, что нельзя выписать макс.степени сразу у 2х простых. Отсюда ответ. Сумма степеней простых - их кол-во. А это Кол-во таких p^e<=n, что e>1
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Максимум получается, когда мы берем все степени всех простых до Н в порядке возрастания, минимум - когда берем сначала их максимальные степени. (Понятно, что ЛЦМ и есть произведение этих максимальных степеней).
    Ну а дальше ясно что простые после корня из Н встречаются 1 раз в обоих случаях. Значит ответ - сумма степеней всех простых до корня из Н минус их количество.
  • 15 лет назад, скрыть # ^ |
    ← Rev. 3  
    Проголосовать: нравится +8 Проголосовать: не нравится

    Ясно, что в конце мы получим заказ на сумму = LCM(1, 2, ..., N). Посмотрим, как эту сумму можно набрать:
    Минимум: берем каждое простое в разложении LCM в максимальной степени(это число не превзойдет N). Ответ - количество различных простых, не больших N.
    Максимум: возьмем сначала 1, затем каждое простое в 1 степени, затем во 2, и т.д. Ответ - 1 + количество степеней простых, не больших N
    Простые, большие , можно не учитывать, так как в оба ответа они войдут в точности 1 раз.
15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
По задаче Б, почему в тесте:
1
4 4 0
5491
7653
8595
2281
ответ невозможно, а не 4?
Как по мне сумма сверху = сумма снизу, а сумма слева = сумме справа, или я в чем-то не прав?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
В задаче А читал t в интегральный тип, поэтому когда пробегал неполные секунды, жестко терялась точность, в итоге 7 неудачных попыток. Задача С большая упала, т.к. прозевал что простые около 1e6  в квадрате переполнят int. 

Если бы не это прошел бы с 48 и 1:26. А так даже футболку не получу. Думал что я адский неудачник, но почитав эту тему понял что не все так плохо... :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
В большой B проходил бинпоиск ?
там вообще есть монотонность ответа ?
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

FUUUUU...
там такой простой куб заходит (..