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

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

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

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

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

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

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

До свидания.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • »
    »
    14 лет назад, скрыть # ^ |
    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 (для проверки мы и считали динамику в начале). Если всё получилось, то прибавляем к ответу единичку.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    http://pastebin.com/y828AhRQ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

whatever