Изменения рейтингов за последние раунды временно удалены. Скоро они будут возвращены. ×

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

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

Если есть еще такие же персоны, как я, то добро пожаловать — это будет последняя попытка пройти во второй раунд
Место и время.
Осталось примерно 6 часов до начала!

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

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

Расскажите, пожалуйста, В на полный балл.

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

    Да и насчет Б на неполный балл -- там надо было как-то соптимизировать "сгенерируем все N! перестановок и каждую проверим" или что-то другое?

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

      Да, на неполный балл в B заходил полный перебор всех перестановок.

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

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

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

    Сначала склеим все, что необходимо склеить. Для каждой буквы бывают куски, которые на нее только кончаются (не больше одного, иначе ответ 0), которые на нее начинаются и кончаются (любое количество), и которые на нее только начинаются (не больше одного), склеим их в этом порядке. Те, что посередине, могут идти в любом порядке. Пусть их L — тогда результат домножим на L!

    После склеивания по каждой букве получилось несколько кусков. Если куски хорошие (одна и та же буква не встречается в них не подряд), и каждая буква встречается не больше чем в одном куске, то их можно клеить в любом порядке, то есть результат опять домножается на факториал количества кусков.

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

Как решать B-, C- large?

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

    B: построим ориентированный граф на буквах. Если в какой-то строке после a идет b, добавим ребро из a в b (возможно, будут получаться кратные ребра). Проверим, что граф является набором путей (для каждой буквы не более одного входящего и одного исходящего ребра, нет циклов). Тогда ответ = (произведение по всем буквам) (количество строк, состоящих целиком из этой буквы)! умножить на (количество путей)!.

    C: оптимальная фигура — это всегда прямоугольник с отрезанными углами. Переберем размеры прямоугольника и размер каждого из углов, это уже работает очень быстро. Кроме того, в оптимальном ответе размеры отрезанных углов отличаются не более чем на 1.

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

      А умеешь доказывать, что в C ответ такого вида?

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

        Вроде бы это очевидно :) Понятно, что ответ выпуклый (иначе существует выпуклый не хуже), а любая такая выпуклая фигура — это и есть прямоульник с отрезанными углами.

        Про размер углов тоже понятно, если они различаются сильнее, стоит один уменьшить на 1, а другой увеличить.

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

        Ну, совсем строгое доказательство — это геморройный разбор случаев. Сперва поймем, что фигура совпадает со своей 4-связной границей (иначе что-то можно удалить). Дальше избавимся от точек сочленения (в 8-связном смысле), чтобы не было таких ситуаций:

        ...**.
        ***..*
        ...**.
        

        Избавимся как-нибудь так: удалим точку, сдвинем компоненты (здесь надо разобрать случаи, как могут располагаться компоненты и почему их можно сдвинуть), приклеим точку сбоку, чтобы появился дополнительный путь; площадь не уменьшилась. Возможно, придется повторить первый пункт с удалением точек не на границе.

        Теперь пойдем по границе и будем разрешать невыпуклости (к примеру, левый верхний угол):

        ..*    .**
        **. -> *..
        

        Теперь мы можем это делать, поскольку точек сочленения нет и точки, которые были внутри, останутся внутри.

        Это то, что сходу в голову пришло, возможно, есть более простой способ.

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

      С отрезанными углами, то есть, что-то такого вида?

      .***...
      *...***
      **....*
      ..****.

      Мне кажется, такую фигуру всегда можно свести к прямоугольнику, у которого отсутствует только по одному символу в углах. И в котором просто будет чуть больше клеток. В данном случае это будет:

      .*****.
      *.....*
      *.....*
      .*****.

      Или есть пример, показывающий обратное?

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

Кто-то может рассказать, как на GCJ наборы тестов генерируются? Есть какой-то пул инпутов, из которого дают случайный? Или инпут генерируется на ходу?

Заинтересовался, потому что по В убогость тестов зашкаливает. С учетом того, что к результату "ответ равен 0 или х" можно прийти, посчитав одним dfs-ом количество компонент на графе из букв, и еще одним циклом — количество строк, состоящих целиком из заданной буквы, а потом перемножить все эти факториалы; а для проверки "0 или не 0" надо сделать намного больше работы... Давать наборы, в которых тестов с ответом 0 — 7 или 8 штук из 100 — это не айс.

Мое АС-решение даже на тест 2 a bac дает ответ 1.

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

Any idea for problem C ?

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

can anyone give a hint on how to solve problem B?
P.S. i could solve C-small (with a solution, probably the most complex solution that solved it correctly :P), but not B-small!

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

WTF is happening with scoreboard? Today I found myself 6 places lower than yesterday morning. It didn't make me out of Round 2, but still is interesting.