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

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

Уже через три часа стартует первый раунд FHC. Напомним, что в следующий этап проходят все те участники, которые решат столько же задач, сколько 500-е место, при условии что 500-й участник решил хотя бы одну задачу. Раунд продлится 24 часа

ссылка на раунд — https://www.facebook.com/hackercup/problems.php?round=225705397509134 Не забываем что в прошлый раз были проблемы с https

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

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

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

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

Ссылку на олимпиаду киньте

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

У меня одного

Запрашиваемая Вами страница не найдена. Вы нажали на устаревшую ссылку или неправильно набрали адрес. Некоторые вебсайты чувствительны к регистру. Вернуться на главную Вернуться на предыдущую страницу

?

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

После этого комментария я уже смирился с тем, что не видать мне Online Round 1. Но на следующий день пришло письмо — ответ на клар:

Hi Boris,
Your problem was graded correct. Good luck in Round 1.
Thanks for contacting Facebook,
Facebook
-----Original Message to Facebook-----
_From: ... _
To: The Facebook Team
Subject: Hacker Cup Feedback
Type of Feedback: error
Problem: Billboards
What's Up?: Some days ago I send solution of this problem, put had no result. I send it on https. I read on forum that it means that I had presentation error, but it wasn't showed to me, so I've no chance to correct solutions. Also I read that some submitions with same problem were corrected by jury and rejdged. So, can you make the same with my solution? Contact Email: ...
-----End Original Message to Facebook-----

Тем не менее в раунд меня не пускает. Да что ж это такое =( На главной странице не могу даже найти контактов жюри.

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

Round One: Fight!

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

So fail....

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

Если так дальше и пойдёт, то 500ое место будет иметь все 3 задачи

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

    это да. Прошло всего 4 часа раунда, а 250 человек уже послали все 3 задачи (а остальные 250 — по 2 задачи). Так что схалявить как в квале не получиться, придётся решать все 3.

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

    Итого 1492 человека решило 3 задачи (без учета тестирования).

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

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

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

Поясните пожалуйста мне убогому, почему в первой задаче ответ для S = 5, 6 а не 5? Мы ведь можем поместить checkpoint и goal в точку (1, 4) и тогда S = 5 и T = 5, разве нет?

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

Ух.. вроде решил все задачи. Несмотря на постоянные их лаги, задачи у них очень интересные, по крайней мере раунд1 мне очень понравился.

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

Уверен что все 3 задачи сдаст далеко не 500 человек. Задачи простые, многие пренебрегают внимательной вычиткой условия, тестированием на крайних случаях. Оффтоп: в этой теме неоправданно много минусов.

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

Посубмитили уже больше 500 человек. Очевидно, задачи более-менее простые(конечно, узнаем на финальных тестах насколько они простые). Вот лично я считаю, что это плохо. Чисто гипотетически, если Петр ошибется в какой-нибудь задаче, он весьма вероятно пролетит мимо следующего раунда! Это не есть хорошо.

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

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

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

Самое смешное, что на самом сайте, в комментариях к туру уже давным давно выложены по несколько раз идеи решения всех задач =(

Модерация, такая модерация на мордакниге=(

Загнули они с ограничением на 500 мест с тремя простыми задачами... При этом любой может решить задачи, почитав комментарии, а те, кто честно решал, но в связи с техническими какими проблемами с сетью там, или отослав не то, или глупую ошибку допустив, пролетят, решив даже 2 задачи, так как разжеванные решения всем известны и с 3-мя уже больше 1000=(

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

    Пролистал FAQ и правила. Среди условий дисквалификации: "Communicating or publishing information concerning the content of the problems, or solutions to the problems, with other competitors, either directly or indirectly, before the end of the Round." Не понимаю, на что расчитывали те, кто там прям в комментариях на тесты отвечал или условия постил.

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

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

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

Чё-то не круто получается: люди с закрытым проблемсетом могут не пройти в следующий раунд

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

Ничерта не работает на Facebook: только что благополучно получил Time Expired по одной из задач, т.к. сабмиты у меня принимать никто не хочет — нажимаю на кнопку Submit, и ничего не происходит. Остальные две решать, естественно, не буду. (отправлял из Firefox 8.0)

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

    Надо заметить, у меня по всем трем такой вердикт, хотя с первого раза все отправилось, причем я вижу свои сорцы, вывод и md5. Сам на всякий случай написал feedback, и вам советую.

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

    Это в очередной раз говорит о том, что прежде чем проводить реальные соревнования, надо проводить тестовые контесты на своей системе. Все особенности всех браузеров и конфигураций учесть непросто, и даже если в системе не используется, простите за выражение, флеш, всё равно априори нельзя быть уверенным на 100% в работоспособности.

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

Вообще, конечно, соревнования для саперов надо проводить по таким правилам, а не для программистов %)

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

    Посмотрим. Может, все-таки окажется так что 700+ решений упадут из-за какой-нибудь фигни и народ пройдет. Всякие чудеса случаются.

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

Как решать Checkpoint?

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

    Кол-во способов дойти в (i,j) — C(i+j,j) причем стоит оно i+j. Раскладываем в произведение двух цешек (предподсчитаны) с минимальной суммой

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

      Каким образом преподсчитываются все C(i+j,j)? Я сохранял в массив все 10 миллионов вариантов. Уверен, что есть способ лучше.

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

        Я считал все C(i, j) при i до 105, j ≤ i. Но останавливался, если C(i, j) ≥ 107

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

        Можно было рассмотреть :

        1. C(i+j,j) i+j <= 5000.

        2. C(i+j,2) и C(i+j, 1) 5000 < i+j < 10000000.

        Это все сочетания которые могут быть меньше десяти миллионов.

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

          Возможно, глупый вопрос или баян, но хотелось бы узнать как можно эффективно посчитать C(n,k)? Вроде наивным способом будет цикл, есть ли способы лучше?

          for(int n1 = 1; n1 <= 10000000; n1++){
            for(int k1 = 1; k1 <= n1/2; k1++){
              long numerator = 1;
              long denominator = 1;
              for(int m1 = 0; m1 < k1; m1++){
                numerator *= (n1-m1);
                denominator *= (m1+1);
                if(numerator/denominator > 10000000)
          	continue maincycle;
              }
              long resultCombination = numerator/denominator;
            }
          }
          
  • »
    »
    15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Я решил так. Написал динамику по типу кол-во способов дойти до клетки, если можно ходить только вверх-вправо. Высчитывал ее через 2 строки до тех пор пока кол-во способов в первом элемент новой строки не перевалит за S. Там сложность получается меньше чем O (S * logS). Ну и соответственно обновлял кратчайшие расстояния при данном S. А далее у нас кол-во путей разбивается S = Sa * Sb. Где Sa — до checkpoint, Sb — до goal. Нужно перебрать делители S и найти наилучший ответ.

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

    Я решал так:

    Динамикой нашел точки в которые можно добраться A путями, и сохранил в массиве самый короткий путь. Теперь мы имеем массив arr[S] == T

    S общее = S CheckPoint * S Goal

    T (0,0 -> Goal) = T (0,0 -> CheckPoint) + T (CheckPoint -> Goal)

    Просто перебираем все пары множителей через массив

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

    Предпосчитаем для каждого i из [1, 10000000] минимальный периметр dp[i] такого прямоугольника, чтобы количество способов добраться из левой нижней вершины в правую верхнюю было ровно i. Сделать это можно было просто треугольником Паскаля с отсечением. Потом для каждого s будем переберем все его делители del до корня, включая единицу, и найдем минимальную величину dp[s]+dp[s/del].

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

    Там получается, что до какой-то точки можно дойти с помощью C[n,k] способами. И фактически теперь для каждого S нам нужно найти минимальное n, что найдётся k, такой, что C[n,k]=S (тогда n — это путь минимальной длины). Ну и поскольку нам нужно пройти через контрольную точку, то рассмотрим все делители S и ответом будет n1+n2, где n1 и n2 минимумы соответственно в C[n1,k1]=S1 и C[n2,k2]=S2, где S=S1*S2. Я так решал...

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

В последней "Squished Status" вроде было проще всего набажить — не рассмотреть какой-то случай с нулями, или с типами промахнуться (получить переполнение)

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

Проверка опять производится вручную? =\

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

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

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

    ways[i] = количество способов прочитать сообщение, состоящие из i первых символов строки. ways[0] = 1, ways[i + j] += ways[i], для таких j = 1......, что подстрока str[i + 1...i + j] является валидным числом.

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

      +угловые случаи, например для 255 100 ответ — 1, а не 2 или 3

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

        так а что здесь углового? валидное число — это число от 1 до M, это явно сказано в условии.

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

          Например для строки 1100, i = 0, j = 1 ways[0+1] += ways[0] если str[0+1 ... 0+1] является валидным числом Но str[1] нельзя считать валидным числом, потому что нельзя разбить на строки 1-1-[00 — как ни возми, они не валидны]

          Т.е. важно не только чтобы строка str[i+1 ... i+j] была валидной, но и то что после нее остается

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

            ну так и что? давайте промоделируем i = 0 ways[1] += ways[0] (число 1) ways[2] += ways[0] (число 11) ways[3] += ways[0] (число 110) ways[4] — не добавляем,1100 — не подходит пока все ок, ways[1] = ways[2] = ways[3] = 1

            i = 1. ways[1 + 1] += ways[1] ( число 1) ways[1 + 2] += ways[1] (число 10) ways[1 + 3] += ways[1] ( число 100) получили, что пока ways[4] = 1. i = 2. ways[2 + 1] — не добавляем, ибо 0 — не валидное число. аналогично для любых добавлений дальше.

            в конце получим,ways[4] = 1, как и нужно.

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

        "валидное число" как раз учитывает угловые случаи.

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

    Решение — ДП.

    dp[i] = количество способов разбить строку до i-го символа включительно.
    Представим строку как массив чисел (0 <= s[i] < 10), пусть они нумеруются с единицы.
    dp[0] = 1
    dp[i] = (1 <= s[i] && s[i] <= M? dp[i — 1]: 0) + (10 * s[i — 1] + s[i] <= M && s[i — 1] > 0? dp[i — 2]: 0) + (100 * s[i — 2] + 10 * s[i — 1] + s[i] <= M && s[i — 2] > 0? dp[i — 3]: 0)
    Таким образом, нужно учитывать, что число не начинается с нуля и попадает в интервал [1..M] и использовать заранее посчитанные значения.
    Ответ dp[length(s)]

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

кстати я сейчас занимаю 777 место.

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

Е-мое ну сколько можно, а? У них что, реально руками проверяют все тесты? Про чекеры, валидаторы не слышали, не?

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

У одного из моих друзей эпичная ошибка в третьей:

static final long MOD = 0xfaceb00c;

Числа в Java знаковые, буквы L справа от константы не стоит, значит она 32-разрядная и, ВНИМАНИЕ, отрицательная.

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

"This round has ended. Feel free to use the problems for practice though!" Кто подскажет как их использовать если возможности скачать input нету ? :) Кстати когда были представлены даты этого года, сказали можно попробовать решить задачи прошлого года, и ссылка на неработающую систему проверки :)

P.S. было бы неплохо по окончанию писать причину Реджекта по задаче (какой тест например). Или решили и дальше гнуть линию абсолютно молчаливых организаторов ? :)