Блог пользователя anup.kalbalia

Автор anup.kalbalia, 14 лет назад, По-английски

CodeChef invites you to participate in the March 2012 CookOff.

Time: 2130 hrs 18th March 2012 to 0000 hrs, 19th March 2012 (Indian Standard Time — +5:30 GMT) — Check your timezone.
Details: COOK20
Registration: Just need to have a CodeChef user id to participate. New users please register here
Problem Setter: Hiroto Sekido (LayCurse)
Problem Tester: Rajiv Kumar Aggarwal

It promises to deliver on an interesting set of algorithmic problems with something for all.
The contest is open for all and those, who are interested, are requested to have a CodeChef userid, in order to participate.

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

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

Печальное пересечение с wildcard round–ом

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

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

UPD ну, не во всей строке, а только первых n в ней. так что формула из википедии катит

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

    Знание таких слов делает мысли предвзятыми :) Я придумал почти сразу, не зная, как это называется :)

    Пусть g(n) — количество способов раскрасить последовательность длины m в не более чем n цветов так, чтобы на любом отрезке длины k цвета не повторялись. Это несложно считается как что-то типа n*(n-1)*..*(n-k-1)*(n-k)^(m-k). За O(n).

    Пусть f(n) — ответ на задачу, если обязательно использовать каждый цвет хоть раз. Можно заметить, что f(n)=(g(n)-sum_{i=1}^{n-1}{f(i)*C_n^i*i!)/c!. Не знаю, как это сходу объяснить, наверно это не очень сложно понять :) Ответ на задачу — sum_{i=1}^{n}{f(i)}.

    Итого, O(n*(n+k+*log m)).

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

      спасибо, в editorial примерно то же самое) видимо на меня какой-то тупняк сегодня нашел, я же уже когда-то сдавал почти такую же задачу, причем мне кажется, что именно на codechef О_о UPD вот очень похожая задача. решение не совсем такое же, но суть та же.

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

      А откуда там логарифм берется? В разборе тоже логарифм есть, но я не вижу чтобы во внутреннем цикле что-то в степень возводилось.

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

      офигеть. задача на гугление/знание формулы?

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

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

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

        блин, я не подумал что помимо предпосчета степеней двойки можно еще вектор, а не матрицу, умножать)

        видимо компы у них действительно очень медленные...

        UPD в прошлый раз я долго и упорно запихивал правильную асимптотику на эту задачу

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

        А как выглядит матрица? У меня не получилось придумать одну матрицу для всех n и k.

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

          по-моему, верно, что ответ для (n, m, k) равен ответу для (n-k, m-k, 0) :) я на маленьких проверил))

          так что я сначала тупо для каждого k заново строил матрицу, а потом построил ее уже только для k=0, но все равно не запихнул

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

          Просто матрица получения следующей строки чисел Стирлинга из предыдущей. S(n, k) = S(n - 1, k - 1) + kS(n - 1, k). Соответственно, в матрице n × n на главной диагонали стоят единицы, а под ней — числа 1, 2, ..., n.

          Ну и сначала в решении делается while (n > 0 && m > 0 && k > 0) {n--; m--; k--;}, после чего разбираются два случая, когда нулю оказалось равно не k.

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

            а как доказать корректность этого while? я только для мелких заметил и поверил)

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

              Вообще, можно вместо таблицы M × M считать, что у нас есть ограниченно растущая строка длины M: то число, которое встретилось первым, мы будем записывать как 0, то, которое встретилось вторым — как 1, и так далее.

              Первые k + 1 шагов мы обязаны брать различные числа, то есть начало нашей строки имеет вид 0123...k. А дальше на каждом шаге у нас есть x ≥ k + 1 различных встречавшихся чисел, k + 1 последних брать нельзя, соответственно, x - (k + 1) вариантов взять одно из уже встречавшихся чисел. А ещё есть вариант взять новое число, если x < n, в этом случае мы будем обозначать его как x, а количество различных встречавшихся чисел станет x + 1.

              Теперь заметим, что, если в этом рассуждении уменьшить k на единицу и уменьшить n на единицу, то начало строки станет на один символ короче (то есть m уменьшится на единицу), а больше ничего не изменится.

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

    А что за числа Стирлинга вообще? ))

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

It was my first Cook-off. I like the problems. But I was very slow with first 3 and I was out of time just before I was able to solve the forth one.

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

Я правильно понимаю, что в Ciel and Genjiko нужно решение быстрее чем за O(n3logn)?

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

Думал со злости что-то разобью! Отослал на 3ю задачу решение, оно как всегда на фри паскаль не зашло по времени я переписал на жпс, отослал, получил СЕ, убрал uses math, зашел отсылать, отослал и сразу заметил что снова на фри сдал, быстро остановил загрузку, исправил язык и переслал. Но задача успела отослаться, в результате 2е решение прошло, а первое нет и я получил +20 к времени и -2 места которые СНОВА отделили меня от топ 10. :(

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

CIELLAND решалась бинпоиском по ответу?

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

What computers do you use for testing the solutions?

My solution for problem Ciel Numbers I runs locally in 0.150 seconds, but I got TLE on the server.

Is there any way to run solution on the server, to learn, how much time does it work?

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

it's very unconvinient to search the problems in "practice". Could you make a opportunity to classify the problems by the contests where their were in?