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

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

Сегодня в 19:00 МСК

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

13 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
Когда я регистрировался, там было 2 варианта ответов на какой-то вопрос - "Yes" и "No". Очень спешил, читать было некогда, машинально поставил "Yes" и нажал "I agree". Что у меня вообще там спрашивали?)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +23 Проголосовать: не нравится

    Согласны ли вы добровольно пожертвовать 100000 долларов Топкодеру.

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Честно говоря, предсказуемый ответ) А если серьезно?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Там было чето типа "можно мы будем спамить вам о какой-то хрени?". Я нажал да, и действительно, арена мне сейчас каждые 5 минут спам какой-то пишет, я не вникал, че там.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Я нажал no, но меня арена тоже спамила каждые 5-10 минут.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      это в случае выигрыша? или что?

      P.S. я тоже не читал, ну вроде там что то про Intel говорилось

      • 13 лет назад, # ^ |
          Проголосовать: нравится +18 Проголосовать: не нравится
        Там спрашивали, можно ли Intel будет умолять Вас пойти к ним на работу.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Объясните кто-нибудь, после челленджа, пожалуйста, почему первая динамика, которая приходит в голову в 500-ке не работает

(думаю, многие поняли о чем я и нет смысла пояснять)

  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Потому что сообщения жюри читать иногда надо ):
    • 13 лет назад, # ^ |
        Проголосовать: нравится -6 Проголосовать: не нравится
      модификация ее с целью соответствия сообщению жюри, кажется, довольно простая
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        а что за сообщение жюри?

        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          типа таблицы различные, если хотя бы у одного участника разные баллы хотя бы по одной задаче
          • 13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

            стоп, а 1000 div2 и 500 div1 совпадают?

            P.S. все узнал-не совпадают

            • 13 лет назад, # ^ |
                Проголосовать: нравится -8 Проголосовать: не нравится
              не знаю, вроде обычно нет
              div2 500 = div1 250 - вот это обычная практика
13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Я наверно где-то ошибаюсь, но разве отношение равенства двух scoreboard из сообщения жюри транзитивно?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    равны, если очки по любой задаче любого участника в 2 бордах равны - очевидно что все тут хорошо
13 лет назад, # |
Rev. 2   Проголосовать: нравится +2 Проголосовать: не нравится

Расскажите, как считать массив - сколькими способами участник может набирать i очков.(500 div 1)

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    присоединяюсь к реквесту

    блин, так всё здорово складывалось до появления клара жюри :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    вроде можно строить для каждого следующего дерево отрезков с модификацией на отрезке и взятием элемента
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Можно через дерево отрезков для суммы с интервальной модификацией, но это очевидно не вариант.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      эм, а почему не вариант?

      для каждого следующего считаем за 2*10^5*log(2*10^5), итого 8*10^7 в сумме примерно

      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Можно проще, если считать не кол-во способов по очкам, а сразу сумму кол-ва способов от 0 до некоторого очка.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +18 Проголосовать: не нравится
      Господи, а суммы на префиксах уже не круто?
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    Будем считать это отдельно для каждой маски решенных задач. Как решать это для случая одной или двух решенных задач вроде очевидно.

    В случае трех считать очередной ответ за единицу помогает простая "почти" биекция с ответом для счета на 1 меньше - +-1 балл по первой задаче. "Биективность портит" лишь наборы наборы когда по первой задаче минимальный или максимально возможный балл, а число таких наборов мы уже знаем, т.к. там лишь две переменные.

    P.s. Итого линия, без всяких деревьев отрезков, да и еще пишется быстрее и проще.

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

    Я писал включения-исключения. Только где-то набажил, пока не нашел еще, где)

    Т.е. количество способов выбрать так, чтобы не вылез ни один -

    это общее количество способов - количество, где вылез первый - количество, где вылез второй - количество, где вылез третий + количество, где вылезли первые 2...

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

    Я завёл массив Add[] , тогда для добавления числа на отрезок [a,b] исопльзовал Add[a]+=val; Add[b+1]-=val; На контесте не успел отдебажить( Сейчас 4 тест проходит, отправлю потом в практисрум - помотрю. Ну и когда пересчитывал каждый элемент массива, то у меня был глобальный счетчик сколько сейчас надо записать в ячейку. Это для каждой маски отдельно конечно же.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Посчитаем сколькими способами можно посчитать с данной маской задач.(заюзаем 8 деревьев отрезков)

    ans[0][0]=1; ans[0][x!=0]=0; очевидно

    Для каждой маски пусть старший бит i-ый тогда 

    sposobov[mask].set(cnt,sposobov[mask-(1<<i)].sum(max(cnt-points[i],0),cnt-1));
13 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится
Имхо, они клар через одно место сформулировали походу. Как я понял таблицы разные если в них хотя бы одно число разное.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    Там написано по каждой задаче, хотя это странно.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится
      Вот именно, так я и прочитал. Но тогда (1,1,6)=(1,2,5) и (1,2,5)=(3,2,3), но (1,1,6)!=(3,2,3).
      • 13 лет назад, # ^ |
          Проголосовать: нравится +16 Проголосовать: не нравится
        Что это за ерунда? Таблицы разные если разные хотя бы одно число, это тоже самое, что они одинаковые если одинаковые все баллы по всем парам (участник, задача), что логично!
        • 13 лет назад, # ^ |
            Проголосовать: нравится +6 Проголосовать: не нравится
          Потому что формулировка клара была такая:

          Two scoreboards are considered different if a competitor has the same total score but different scores on each problem.

          Формально это значит, что все три числа в первой таблице не равны соответствующим трём числам во второй таблице. Но имелось в виду не это (иначе бы у меня не работало на сэмплах), а общепринятое понимание.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Соглашусь, можно прочитать и так. Но можно прочитать и что они различны как тройки. Формально неоднозначность есть, но она убивается примерами и здравым смыслом.
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Ну нет, это было бы

              ... different scores on at least one problem.
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Формально как раз-таки налицо полное несоответствие клара и семплов.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Поэтому я и написал, что клар сформулировали мягко говоря неудачно. Но понятно же, что другое определение различности было бы неестественным.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Есть идеи решения 1000-ой? Ничего кроме кубической динамики придумать не могу. Правда в ней состояний недостижимых много, но 4*10^8 достижимо.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня была идея, которая не работает, если хоть 1 неудачный челлендж был сделан участником, у которого "YY". Если предположить, что таких челленджей нет, то в начале найдем кол-во неудачных челленджей, забьем на них и в конце домножим на соотв. бином. коэф. А когда остались только удачные челленджи, то заметим, что тогда кол-во участников с YN и NY всегда совпадает, следовательно, можно убрать один параметр из динамики.
13 лет назад, # |
  Проголосовать: нравится -20 Проголосовать: не нравится
немного не хватило дописать медиум,с изи на 153 буду ой как далеко(
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Объясните мне кто-нибудь пожалуйста, почему в 250 div 2 на тест
{6,5,3,2,7}
2
Правильный ответ 0, а не 1.
первого, третьего и пятого человека посылаем в 1-ую комнату, а остальных во вторую.
В первой комнате:
6,3,7
7>6 значил один человек круче нас (a[0] == 6), следовательно ответ - 1.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    упорядочим баллы: 7 6 5 3 2, 0го в 1ю команту, 1го(то бишь нас) во вторую, 2го в первую, 3го во вторую, 4го в первую, итого мы во второй комнате самые крутые, ответ 0
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
благодаря этому раунду, я наконец узнал как идет деление по комнатам и начисления штрафа)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +16 Проголосовать: не нравится
    Разочаровать что-ли, что Вас кинули? :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      и в первом и во втором случае?!
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Во втором точно. Там какая-то сложная функция. Можно где-то в tutorial найти.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Во втором точно.

        Формула есть на сайте в справке, там все нелинейно.

        В первом - не знаю, никогда не интересовался, но интуитивно кажется, что тоже немного иначе - ведь в первой комнате нету Туриста)

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

13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
У меня одного 500 упала на тесте {"NNN", "NNN"}?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я еще во время контеста отметил этот тест, как единственный тест, который не дан в семплах (хоть был и очень похожий). Правда, в моем руме было всего 3 сабмита кроме моего и все они на нем верно работали. В последствии оказалось, что в руме вообще не было ни одного неверного сабмита, ни по одной задаче.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Я сабмитил на последних минутах - не было времени на тестирование. Правда в практисе после исправления ошибки с этим тестом прошла.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
кто-нибудь в курсе причин реджаджа?
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Во время сис. тестов пару комнат пропустили.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я в Див2 видел у некоторых непроверенные решения, после того как сообщили что Систем Тест закончен. Мб из-за этого?
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Может кто-нибудь помочь с div.2 1000?
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    ДП с состоянием <номер участника, количество прошедших решений, количество зачеллендженных решений>.

    dp[i][j][k] = sum{dp[i-1][p][q], таким что (p > j) или (p = j и q <= k)}

    Кроме того, нужно учитывать разный порядок. Например, случаи failed passed not submitted и passed failed not submitted учитываются в одном и том же состоянии dp[i][1][0], но должны считаться 2 раза.
    Для этого dp[i][j][k] домножаем на C[A[i]][j] * C[A[i]-j][k], где С[][] - количество сочетаний, A[] - количество засабмиченных решений у i-го участника (то есть количество Y в строке).

    Кроме того, надо правильно записать состояния для нулевого участника dp[0][j][k] = C[A[0]][j] * C[A[0]-j][k], только если j + k <= A[0].
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    мне кажется, решение выше немного сложно, я делал так, условимся, что если чел не отправил задачу, то она как бы failed, теперь храним состояние dp[l][i][j][k] - количество способов прийти в это состояние, где l - номер участника, i, j, k состояния соответсвенно для 1й, 2й и 3ей задачи (оно равно нулю если задача упала, 1 если зачелледжена, и 2 если прошла), и из состояния l,i,j,k есть переход в состояния l+1,i1,j1,k1, такие, что количество решенных задач l-го участника боьше чем l+1, или при равенстве количество челенджей первого не больше, чем у второго..... база: во все возможные варианты первого ставим 1.... в конце проходим по всем состояниям n-1,i,j,k (при 0-индексации) и суммируем их... вот мой код

    P.S. кстати сложность получается n*3^6, что в худшем случае около 40тыс итераций

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

(коммент не туда)

Решал вчера эту задачу (Div-2 1000), написал такой код:
int p(int s, int p, int f, int c) { // да, завел 4 измерения, а убирать одно было лень
    int res = 1;
    for (int i = 1; i <= s; i++) res *= s;
    for (int i = 1; i <= p; i++) res /= p;
    for (int i = 1; i <= f; i++) res /= f;
    for (int i = 1; i <= c; i++) res /= c;
    return res;
 }
Потом два часа сидел и думал, что же неправильно...

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Так в чем прикол - в том, что ты делил по модулю неправильно или то что переменная и функция называются одинаково (разве Java вообще такое пропускает?)?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Джава такое допускает (смотри сюда: http://www.codeforces.ru/blog/entry/1881#comment-37177), деление не причем, т.к. 0 ≤ s, p, f, c ≤ 3.

      А прикол в том, что правильно так:
      int p(int s, int p, int f, int c) {
          int res = 1;
          for (int i = 1; i <= s; i++) res *= i;
          for (int i = 1; i <= p; i++) res /= i;
          for (int i = 1; i <= f; i++) res /= i;
          for (int i = 1; i <= c; i++) res /= i;
          return res;
       }
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      и все-таки double post...