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

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

Здравствуйте!

И вот ОН грядёт! В эту субботу — 16 июня в 11-00 по московскому времени состоится эпическая битва, которая должна всем надолго запомниться — 550 человек падут, и останется только 50. Может быть, это будете вы?

Приглашаются все, кто прошёл квалификационные раунды. А также болельщикам вход не запрещается...

P.S.: Опубликован официальный разбор.

P.S.: Видео-разбор — от него iPhone andrewzta раскалился.

До свидания.

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

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

глупость мой комментарий!

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

Ну что за несправедливость, 16 у меня экзамен. Придется сдавать с другой группой, потому что отборочный пропускать нельзя.

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

    А у меня защита диплома :)

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

      И что ты выберешь?

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

        Ну диплом каждый день защищаешь, а отборочный тур RCC — один такой.

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

      Да ну, ты успеешь после защиты, если результаты не будешь ждать :)

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

        Не знаю, как в ТГУ, а у нас на защите вполне реально спокойно порешать контест :) Выступил, ответил на вопросы, поблагодарил всех, сел на самые Богом забытые места в конце аудитории и решай сколько влезет, главное не сильно бурно радуйся Accepted'ам.

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

    Ну а нам остается надеяться только на то, чтобы успеть сдать до 11.

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

Опять в субботу вставать черт знает во сколько ((((

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

Я не очень понимаю зачем соревнование, в котором участвует море студентов, ставить в 11 утра в самый разгар сессии. Лично я уже договорился с преподавателем, но, право, некомильфо...

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

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

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

      А еще болельщики ездили в этот день на футбол. Хотя кажется надо было выбрать RCC

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

У кого-нибудь открывается сайт RCC?

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

Попутать индексы в 2 задачах — это уже перебор как-то

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

Спасибо за задачи, было интересно!
Расскажите пожалуйста, как решать B не тупым разбором случаев и как упихать D в TL?

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

    А что в D пихать? Там N * N * 10000 легко заходит.

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

    А где там разбор случаев? Находишь простой поток из вершины s1 в s2, все ребра от s1 до s2 релаксишь на велечину потока, далее находишь предка вершины s1 с максимальной величиной ребра и аналогично s2. Ответ flow + min(ans(s1), ans(s2))/

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

      Ну дело в том, что я не знаю потоков... :(

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

        Там не нужен поток. Заметим, что у нас дерево, путь всегда один, следовательно, можно "поток" просто посчитать тупым обходом в глубину.

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

          Ну так это и есть обычное решение, просто назвали его потоком.

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

        Так, как дано дерево, то просто нужно найти min из прочности дорого пути между s1 и s2 вместо потока.

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

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

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

        Поток в дереве — это минимум пропускных способоностей на пути. Никаких специальных алгоритмов знать не надо.

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

    А в B у меня 4 случая: оба смежных со столицами ребра входят в путь между ними, оба не входят, одно входит, другое — нет. По-моему 4 случая — это немного.

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

    У меня без проблем D зашла (асимптотика — O(N2 * T)).

    Если S > T, то поменяем их местами (несложно доказать, что ответ от этого не поменяется), т.е. мы утверждаем, что всегда путаем монеты большего номинала с монетами меньшего номинала. Сортируем монеты по возрастанию номинала (для удобства).

    Далее динамика dp[i][sum] — можем ли мы набрать монетами сумму sum, не используя монеты типа i. Наверное, как её считать — очевидно. В самой динамике храним boolean значения — можем мы добраться до такого состояния или нет.

    Потом перебираем все пары монет, пусть C1 — номинал первой монеты, C2 — номинал второй монеты, C1 > C2. Заметим, что мы могли их спутать, только если (T - S) делится на (C1 - C2). Отсюда получаем количество спутанных монет: . Надо не забыть отсечь случаи, когда C1 > T или C2 > S. Проверим теперь, можем ли мы набрать сумму (S - count × C2), не используя монету C2, и можем ли мы набрать сумму (T - count × C1), не используя монету C1 (для проверки мы и считали динамику в начале). Если всё получилось, то прибавляем к ответу единичку.

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

      Да уж, мне тоже надо руки выпрямлять.
      Спасибо!

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

      Ок, поправлено.

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

        Так и есть, я изначально ошибся.

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

      Я посчитал динамику dp при помощи битовых масок: ) А второй этап я оптимизировал перебирая count только как делитель T — S. Таким образом получается не больше 107 операций.

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

      можно считать одномерную динамику dpsum, перебирая i в цикле...

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

    B решается так: находишь путь из s1 в s2, уменьшаешь все рёбра на нём на величину минимального из них (пусть она равна cm), тогда ответ равен cm + min(maxai = s1ci, maxai = s2ci) (здесь ai и bi — концы i-го ребра, ci — пропускная способность, каждое ребро можно рассматривать в любую сторону, s1 и s2 — номера столиц).

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

это неловкое чувство, когда проспал полраунда...

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

А как решать С нормально? Я писал с 50000 сетами, деревом отрезков и кучей кода, который так и не заработал =(

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

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

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

      Понятно, спасибо. Ну да, я это и писал. Надо, значит, руки выпрямлять.

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

        Я вот написал scanf("%x", &x) вместо scanf("%d", &x). А это 16-ричные числа)

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

          Отменный баг =)

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

            Я слышал, что scanf вообще магический. Например, %x читает шестнадцатеричные числа. Там еще как-то подобие регексов можно использовать, но я не знаю как.

            Если кто-то уже знает, напишите пост на Codeforces про магия scanf. Все будут очень благодарны.

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

              регекспов это сильно сказано. Там можно считать пока множество символов и читать пока не множество символов. Еще есть можно как-то резать число прочитанных символов вроде. И еще есть несколько плюшек для ввода чисел, вроде этого %x.

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

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

              ничего регекспного там нет, тем более статей по scanf море

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

                Пример хорошей статьи про scanf/printf с уклоном в олимпиадное программирование?

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

                Есть в scanf регулярные выражения, только слабенькие. Например, такой код:

                #include <cstdio>
                using namespace std;
                char s[100];
                int main() {
                    scanf("%[a-zA-Z]", s);
                    printf("%s\n", s);
                }
                

                Будет считывать строку как обычно, пока не встретит в ней символ, отличающийся от латинской буквы.

                Если написать scanf("%[^0-9]", s);, то считается строка до первого вхождения цифры.

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

                Думаю, строки string более удобные, но и это может пригодиться.

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

                  "слабые регулярные выражения" — такие слабые, что можно не писать, что это регулярные выражения

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

      Можно без дерева отрезков. Храним два сета: список вагонов, где K чуваков и где K+1 чуваков. Когда какой-то опустошается, меняем местами. K можно и не хранить. Кода мало.

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

        А можно тупо завести еще 50к сетов (купе, где 0 чуваков, купе, где 1 чувак и т.д.), и еще поддерживать минимальный индекс, где есть хоть 1 купе и максимальный, где есть хоть 1. Избавляет от кучи гемора

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

    При желании можно обойтись одними лишь стандартными структурами:

    http://pastebin.com/y828AhRQ

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

      Вообще, кажется пора начинать набирать скилл в STL. Привычка с Pascal/C — всё писать самому. На олимпиадах по формату IOI ещё катит, на формате ACM, начинает сильно чуствоваться необходимость в STL. Даже если дерево отрезков пишешь достаточно быстро, всё равно какое-то время тратится. Здесь же, когда я понял что надо писать кучу с динамическим выделением памяти, сразу пришлось лезть в мануал сета.

      Вообще интересно, есть ли контесты, где STL запрещён? :)

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

        А как ты себе это представляешь технически? Удалить файлы из папки компилятора или следить руками? Мне кажется за такое....

        Естественно везде разрешена стандартная поставка компилятора. Другой вопрос что нестандартные расширения, а так же фичи с++11 могут не везде поддерживать.

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

          Ну можно просто запретить C++ и оставить С, например) Есть ещё существенные отличия C и С++, реально применяемые в спортивном программировании, кроме STL?

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

            Нормальные структуры (с методами и конструкторами), перегрузка операторов, объявление переменных не в начале функции (в том числе в заголовке цикла for), наверно куча всего еще.

            UPD: говорят, в новом стандарте все-таки можно объявлять переменные где попало.

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

              Можно, -std=c99

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

              Да, пожалуй достаточно для невозможности такого варианта. В С уже можно объявлять переменные не в начале функции, но в for'е всё ещё нельзя, last time I checked.

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

                в fore можно если c99

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

                  Тогда значит, объявлять переменные не в начале можно было ещё до С99, потому что я когда года 3 кодил в С, в for'е было нельзя (не ставил специально С99), а вот переменные не в начале — спокойно.

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

        Раньше было много разных индусских контестов, на которых можно было получить вердикт Restricted Function и потом двоичным поиском выяснять, что же так не понравилось системе проверки. Ещё и оказывается потом, что это какой-нибудь memset... конкретно насчёт STL не помню.

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

    Артур, я сдал такое после исправления нескольких багов

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

      Я полчаса просидел за поиском багов и решил попытаться придумать, как избавиться от ДО, но так и не придумал.

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

исправлять час косяк со вторым тестом в первой задаче — это уже перебор как-то...

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

а почему в D во 2м семпле нельзя взять монеты 2,2,3,4 и Ринсвинд принял монету 4 за монету 3, тогда получается что он отдал 2+2+3+4=11, а сумма была 2+2+3+3=10 или я что-то не понимаю в условии?

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

    У меня таже проблема была. Я написал клар и они изменили немного условие(зделали новое обяснение первого семпла).

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

      Никакого оповещения не приходило. Я полчаса думал, что происходит. Тоже писал клар, потом кое-как сдал, обновил страницу — и, конечно же, условие обновлено!

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

        У них оповещение — ето колонка справа(Russian Code Cup в Твиттере). Там появилось, что условие обновлено. И на клары ответ приходит только на почту(или я не нашол), а ето как-то странно.

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

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

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

    Он заменил все монеты номинала 3 на монеты номинала 4

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

      Да, но в текстовом пояснении первого сэмпла, единственный вариант который подходил, это что заменялись все монеты, из того, как он в итоге заплатил, а не как он хотел заплатить.

      У меня в коде изменений было минимально, но кого-то могло сильнее затормозить.

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

Почему работает такое решение на задачу А? http://pastebin.com/Divpphx2

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

    Может рёбра нужно сделать неориентированными?

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

    Перестановка — это набор циклов. Внутри цикла мы любое число можем поставить на любое место за некоторое кол-во шагов. Проверяем, находятся ли 2 числа в одной компоненте связности, т.е. цикле.

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

    Потому что, каждое произведение перестановок соответствует некоторому пути в этом графе, дополненном петлями, и наоброт.

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

    Потому что каждая перестановка происходит по циклу, отсюда, переходя к графу, легко следует, что если из вершины v1 можно добраться до v2, то и из вершины v2 можно добраться в v1. Следовательно, нужно найти все компоненты сильной связности, и, если две вершины из запроса принадлежат одной и той же КСС, ответ yes, иначе no

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

    мне вот больше интересно, почему такое решение НЕ работало первые почти полтора часа, в связи с магическим рантаймом на 2м тесте...

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

    Потому что оно правильное:)

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

      А можно не работавший код? Мне просто интересно как можно читать числа, так чтобы на что-то влияли лишние пробелы. Или там что-то более существенное было?

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

В тренировках есть дорешивание и виртуальный контест — 2012 Russian Code Cup, отборочный раунд.

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

Не модно больше быть Аладдином... (proof)

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

Мои решения, если кому интересно

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

Очень сильно напоминает F: http://acm.sgu.ru/problem.php?contest=0&problem=526

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

С перетестированием задачи А не очень понятно. После того, как исправили тесты, теперь заходит моё первое решение. Однако при перетестировании засчитали только последнее, то есть штрафные минуты не отминусовали почему-то.

UPD: уже оперативно пофиксили

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

Не знаю про эпическую битву, но эпический слив "не сделать В за 50+ минут реального времени и не пройти" у меня получился.

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

    У меня тоже получился слив на В — "случайно написать в В в DFS вместо минимального участка пути его длину, не заметить, и получить +4". С +3 — уже 52е место.

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

      У меня ACDF в итоге, просто)

      Причем такой "герой" я один, похоже)

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

        Еще есть Gassa c ABDF.

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

          Ну, ABDF ещё можно объяснить, а ACDF это просто "не судьба". Бывает и такое иногда...

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

            Я, как выяснилось через 20 минут после конца контеста, не заметил, что по "старому пути" из C1 в C2 еще можно немного потока толкнуть %)

            4 1 4
            1 2 90
            1 3 7
            2 4 100
            

            Ответ, оказывается, 97 %)

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

          А, ну да.

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

    Не сделать С за 100+ минут и не пройти покруче

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

      Ну, не совсем. Тебе её и так надо было сдавать со штрафным временем не больше чем 100 минут.

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

      а ты специально пишешь, чтобы тебя заминусовали?)

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

        Саша, я это пишу только потому что считаю что так и есть. И еще потому что считаю что я должен был пройти на финал, и в очередной раз запорол свой шанс.

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

Странно. Получил на С WA5, тупо забыл добавить проверку на выход итератора за пределы, но по логике должен был быть Runtime Error. Здесь, в тренировках, рантайм как и положено. Печально, увидел бы рантайм — успел бы найти косяк.

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

    Ну, не могу сказать, что выходы за пределы чего-либо больно детерминированные. Как-то раз было Memory Limit Exceeded, на таком же случае, только за пределы ещё что-то писалось.

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

    Разные версии компилятора скорее всего. В c++ разные выходы за границу не всегда ловятся. Даже в контейнерах.

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

    Сейчас прибегут сторонники Java и начнут тебя агитировать вступать в их клуб :)

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

      А почему не Паскаля? :) Там есть вполне нормальный Range Check Error.

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

        в Паскале меньше встроенных плюшек, а возможности Java и С++ примерно одинаковы (даже в Java побольше будет, например, BigInteger, StringTokenizer и прочее)

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

          В Java нет swapа)))) Это огромный минус для олимпиадного кода

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

        И еще там есть extended, который круче сишного long double. И меньше конструкций, которые при маленьком изменении скомпилируются с неадекватным результатом. Это все плюсы Delphi, которые знаю лично я.

        Гена не в счет. :)

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

      Да ладно, можно писать на том же C++, но везде вместо массива vector и вместо [i] использовать .at(i) =)

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

        Можно, конечно :) Но ходят слухи (сам не проверял), что это в несколько раз замедляет работу программы

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

Интересно, я один сдал D за O(S*n)? :)

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

    наверно:D а как?)

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

    У меня Sn + n2. Думаю это и имелось ввиду. А там то заходит Sn2?

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

      Да, у меня тоже.

      Ага, все сдавали S*n^2 и в разборе тоже S*n^2.

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

        Ну ок. А зачем Sn2 Это чтоли тоже самое, только делать один и тот же рюкзак n раз?

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

          Почему же, n разных рюкзаков

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

          А как делать за O(Sn)?

          O(Sn2) это n динамик вида можно ли набрать число x, не используя число a[i]. Вроде бы это нельзя сжать в n раз...

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

            На самом деле можно хитрым образом сделать (мне Петя рассказал) Будем в динамике число способов искать вместо того, достижимо ли. Тогда чтобы понять, достижимо ли без данной, надо просто посмотреть кол-во способов с данной (ans[v-c]) и сравнить с ans[v]. Если равны, то без данной нельзя

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

              Классно. А количество способов не может вылезать за int/long long типа? Или по модулю считать можно?

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

              А что здесь ans[v], c?

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

                c — цена исключаемой монеты, ans[v] — количество способов набрать сумму v

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

              Имеется в виду (ans[v-c]+ans[v-2c]+ans[v-3c]+...+ans[v%c])?

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

                Да, забыл троеточие

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

                  я наверно туплю, но почему именно сумма, а не просто ans[v-c]?

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

                  Ну да, я туплю

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

            Можно поделить на 64 при помощи битовых масок. Хранить для каждого числа 4 unsigned long long. i-й бит — можно ли получить это число без i-й монеты. Переходы делаются при помощи оператора побитового or и xor.

            Я так сдал, потому что мне 4·108 показалось слишком много.

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

          А как обойтись одним рюкзаком?

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

            Так. я видимо чушь написал выше.

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

            Ну вот посчитаем рюкзак на всех суффиксах и на всех префиксах. Это O(Sn). Тогда проверка для одного значения суммы и одной запрещённой монеты делается за O(s). Заметим, что при фиксированной запрещённой у нас для второй монеты вариантов не 200, а количество делителей S — T, что существенно меньше; вроде выходит быстрее, чем S n^2.

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

      Да, заходит.

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

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

    Потому, что 142 место резко затупило))))

    Не затупило бы — было бы у 23го пять задач.

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

Появились галочки — проходят по 53 место (которое, между прочим, разделено) включительно

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

    А добирают, если кто отказывается? 56-57-й :D

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

      Вопрос тоже интересует. Шансов конечно мало, 60й, но начало учебного года, мало ли :)

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

        В прошлом году брали по 53-е включительно.

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

    То есть нас таких только трое? Я думал больше.

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

      Если знаешь кого-то еще в топ-50, кому нет 18, лучше скажи)

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

        Без заключительной скобочки звучало бы, как угроза.

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

На 55 месте OlgaSob. Никто не желает уступить даме место?)

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

    При этом уступить должны двое. Прошли то 53.

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

      Если уступят двое, тогда два места осободятся, кому второе?

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

        Сейчас проходит 51 человек. Мне, tourist , yeputons нет 18 лет. Поэтому проходит 53 место. Но оно поделенное.

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

        Никто. Проходят первые 50 человек, трое из топ 50 проехать не смогут, поэтому последнее место, которое едет — 53е. А там делёное место. Поэтому взяли обоих, и галками отмечен 51, а не 50 человек. При отказе только одного, их станет 50, и никого дозывать почти наверняка не будут.

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

Пони на 85-ом!!!

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

whatever