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

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

Уже через 10 минут начинается очередной СРМ. Как-то странно никто еще не создал пост. Давайте после контеста обсудим здесь задачи.

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

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

Как 500-ку решать?

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

    Почти как угодно с запоминанием. Например так.

    Считаем динамику. Минимальная строка из первых (r-l+1) символа, которая 1. Больше отрезка [l;r] 2. Не меньше отрезка [l;r] 3. Любая по отношению к отрезку [l;r]

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

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

    Пусть у нас есть строка из цифр и '?'. Научимся за куб от длины выяснять, можем ли мы ее выложить данной колодой (вопросик означает, что на это место можно положить любую цифру). Перебираем куда положить верхнюю карту колоды, внутри динамика за квадрат — храним можем ли мы получить отрезок строки [l,r), используя верхние r-l карт колоды. Переходы очевидны. Если хотя бы для одного положения верхней карты получили D[0][len]=true, то строку выложить можно, иначе нет.

    Теперь делаем стандартный поиск по ответу. Пусть lb — данная нам строка. Пока мы не можем ее получить, увеличиваем последний "не вопросительный" разряд, как только доходим до '9', меняем ее на '?' и переходим к следующему (при этой операции у нас число все время увеличивается). Если в какой-то момент нам надо увеличить несуществующий разряд, то надо вывалиться и сказать No Solution. Иначе в какой-то момент мы научились получать нашу новую строку lb (правда, в конце у нее несколько вопросиков). Теперь пробегаемся по вопросикам слева направо и перебираем для каждого можем ли мы поставить '0', '1' и т.д. Выбираем наименьший возможный вариант. То, что получилось в итоге — это ответ.

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

      У меня такое же решение.

      Научимся за куб от длины выяснять, можем ли мы ее выложить данной колодой

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

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

Лучше расскажите как решать 1000.
Построить сеть из данного графа, добавив в него ребра из стока и истока в выделенные вершины очевидно неверно, и это совсем легко валится.
Запустить один поток, зафиксировать запустить другой тоже. Хотя устойчивым к перенумерации вершин тестом я это валить не научился.

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

    почему-то многие писали послный треш. на что надеялись, интересно)

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

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

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

      Очень хороший треш при наличии удачи иногда проходит, особенно в такой задаче) А +50 у кого-нибудь в комнате обычно большой роли не играет, а вот еще их может и не быть, а еще многие могут и -25 получить.

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

    Судя по авторскому решению в практис руме, достаточно запустить код любого из участников 2 раза: один раз для (a1, a2) и (b1, b2), а второй раз для (a2, a1) и (b1, b2). Если оба раза ответ "Yes", то возвращаем "Yes", иначе — "No".

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

      Не понятно, что при этом меняется. Как это работает на таком тесте: 1 2 N 2 7 N 3 4 N 3 6 N 3 7 O 5 6 N 7 8 N a1 = 1, a2 = 4, an = 50 b1 = 5, b2 = 8, bn = 50 Вроде с какой стороны не запускай поток все насытит и скажет Yes

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

      !!!!!! ААА!!!

      Впервые в жизни я написал авторское решение и не посабмитил его, думал подарю кому-то +50. Жадность сгубила меня!!!

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

      а почему это так, можешь рассказать строго?

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

В моей комнате человек решал 250 так: обойдем граф бфсом и из достижимых выберем подмножество с наибольшим ксором. Казалось бы, это неправильно, но я не могу придумать тест. Кто-нибудь знает как такое ломать или это правильно?

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

    Прошло? Или все-таки неправильно?

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

      Таки упало. На таком тесте:

      [{878, 85, 760, 579}, {"NYNN", "YNYY", "NYNY", "NYYN"}]:878
      

      Я пока не понял, рандом ли это.

      UPD: очевидно, это просто другие баги

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

    Я тоже не придумал за челендж. Авторский тест который свалил такое же у меня в команте — цикл с какими-то непонятными числами. Вообще логично. На цикле видимо получается либо любые две точки либо отрезок.

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

    можно дойти из 0-й вершины до любой достижимой и вернуться обратно. Тогда эта достижимая будет взята 1 раз, а остальные — 0. (и так с каждой достижимой вершиной; в нулевую в последний раз можно не возвращаться.)

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

    Это правильно. Пусть есть простой путь 1 -> 2 -> 3 -> 4 -> 5. Тогда выберем последнюю вершину, которая должна быть в множестве с наибольшим ксором (пусть это 4) и сделаем так 1 xor 2 xor 3 xor 4 xor 3 xor 2 xor 1 (пройдем до нее и обратно). Очевидно, в общую ксор-сумму добавится только значение этой вершины. Если нужно добавить первую вершину, в конце в нее не возвращаемся (доходим только до 2й). Таким способом можно добавить любое множество вершин из простого пути. Если у нас есть несколько веток, выходящих из одной вершины, добавим все нужные вершины из каждой из них по отдельности. Очевидно, это обобщается на произвольное дерево.

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

      Что-то я перемудрил с деревом, действительно можно просто дойти в любую вершину из 0 и вернуться.

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

Странно следующий SRM назначен на 10 октября. Какой-то большой перерыв. В первый раз такое вижу

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

    там ТСО 1-3 октября, они наверно готовятся...