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

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

Привет всем!

Завтра Сегодня, в 12.00 EDT, состоится Topcoder SRM 586.

Предлагаю после контеста обсудить здесь задачи.

GL & HF

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

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

Почему псто так заминусовано? Я бы вот забыл про срм, если бы не оно.

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

    Это первая реакция сообщества на такие посты — минус не раздумывая. Затем, чем ближе к началу, тем больше плюсов от людей вроде вас. После же контеста такие посты обчычно плюсуют те, кто писал решения, спрашивал решения, читал решения.

    P.S Все, кроме первого предложения — мои догадки)

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

    По моему лучше всего смотреть на clist.by. Не забуду никогда :)

    И об lunch time завтра.

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

Мне не удается отредактировать текст блога :-( Выкидывает на страницу с жуком.

В любом случае напоминаю, что раунд состоится уже сегодня.

UPD: Баг возникает при попытке добавить 2 одинаковых тега к посту.

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

Добрый день. Дайте кто-нибудь пример решения для топкодера. Спасибо заранее.

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

Кстати всегда было интересно: если во время матча возникнет вопрос по условию, где его можно задать? В Admin Lobby Room все сообщения видны же всем.

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

Почему в easy кроме check(y[i]) надо еще check(y[i]-1),check(y[i]+1) делать?

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

    Вроде и этого не хватит.

    Смотри тест типа 1 3 1 4 2 4

    Тут рулит интервал (2,3) без концов

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

    такой тест 0 1 0 1 0

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

    Тест 0 2 0 2 0 2 0 оптимальное y = 1.

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

    Может y[i] — 0.5 (или же +-1 если умножить все на 2)?

    Рекомендую посмотреть на вот этот тест: 0,2,1,2

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

    Потому что ответ не обязательно в вершине ломаной достигается. Вот тест: 0 3 -4 7 2 6.

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

    Ну надо проверять не только концы, например, тест "1,2,1,2,1,2,1,2,1". Я удвоил координаты и проверял середины — привет integer overflow :(

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

      Удвоить координаты, после этого проверять Y[i],Y[i]-1,Y[i]+1. Должно работать, разве нет?

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

        Да, но середины-то естественней. Иногда надо читать ограничения в задаче :(

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

          Середины вообще не должны помочь. Например, на тесте -1 9 -1 9 -1 9 1 -9 1 -9 1 -9 1 середины — это 4, 6 и -4. А правильный ответ — любая точка на интервале (-1, +1) (вроде бы ответ 12).

          Я нашёл такое решение на последней минуте у себя в комнате, но не успел придумать тест.

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

            Я вот тоже сейчас придумал тест, но Илья не написал, что сортировал массив перед вычислением середин. И тоже не успел придумать в конце челленджа минуте :)

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

              Ах нет :) и тот участник из комнаты тоже сортировал :)

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

                Угу. А у меня не сортировал. Вообще, у нас в комнате аж 5 решений на систесте упало, надо качаться :) .

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

              Ну конечно в посорченном массиве, где ж ещё? :) "Обычные" середины не имеют никакого физического смысла.

              Я рассуждал так: если мы будем двигаться снизу вверх, то целевой функционал может меняться только при прохождении через вершины, а значит, достаточно взять  - ∞,  + ∞, вершины и точки из внутренности отрезков. Наиболее естественная точка из внутренности отрезка — его середина.

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

            Может быть имелись ввиду середины в посорченном массиве

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

        Я вообще сжал координаты, а потом в массивчик приплюсовывал отрезки, лол.

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

Пора бы перестать на ТопКодере писать первое что придёт в голову и подумать перед этим а нельзя ли потупее написать... (писал на 250 макс. покрытие отрезками с аккуратной обработкой на концах отрезков)

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

Второй раз за день 222ое место) Как 500 решается?

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

    Можно так:

    1)Посчитаем для каждой пары династий (i и j) l[i][j] и r[i][j] — насколько влево и вправо можно сдвинуть одну относительно другой, чтобы не было противоречий (считается просто с учетом сражений). Потом запускаем для l и r Флойда.

    2)Посчитав l и r, на запросы отвечать легко: просто смотрим, возможно ли пересечение правления соответвующих королей.

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

      Можно вторую стадию отдельно не делать, а просто добавить запрос-битву, как еще одну битву и тогда запускать флойда(суммарно 50 раз). Нужно смотреть нет ли отрицаельного/положительного цикла.

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

Great contest, interesting tasks. :-)
EDIT
By the way, can someone explain me 1000 problem DIV2? Thanks

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

    If the length of the string is at most 26, we can build a string using each letter only once. If the length is more than 26, we should use all the letters and always put all occurrences of a letter next to each other. The answer can be calculated using dynamic programming.

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

    For L <= 26:

    The answer is 26*..*(26-L+1), since we have 26 letters for the first choice, 25 for the second one, etc. The minimum weight of a word is 0.

    For L > 26:

    First of all, we should use each letter at least once (since we could easily lower the weight using the unused letter). What to do with the remaining L — 26 choices? Actually, it doesn't matter which letter we pick for each of these choices, since, as long as all occurrences of a letter are next to each other, they contribute to weight identically. For example, if we already have AAB (for simplicity assume that A and B are the only letters in the alphabet) picking A and forming AAAB, or picking B and forming AABB adds the same weight (+1). So we have L — 26 "balls", and we need to distribute them to 26 "urns". The number of ways to do that is
    C[balls+urns-1][urns-1] = C[L-26+26-1][26-1] = C[L-1][25]. Also, we can arbitrarily rearrange groups of identical letters, and the answer becomes
    C[L-1][25] * 26!. The minimum weight of a word is L — 26.

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

      You can calculate answer for second case much easier. Look:

      C[L — 1][25] * 26! = (L — 1)! / (25! * (L — 1 — 25!)) * 26! = (L — 1) ! / (L — 26)! * 26 = (L — 1) * (L — 2) * ... * (L — 25) * 26;

      It means, that you don't need calculate C — just use one loop.

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

Как решать первую задачу в Div2?

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

    Brute Force, каждый раз добавляешь в какой-то список одного игрока, сперва в 1 команду, потом во 2, потом в 1 и так далее. Добавляешь первого не добавленного из векторов preference1 и preference2.

    У меня вопрос. Я решил, но тестирование не прошло. Затем в practice я отправил тот же код, но теперь я получил ac. Как так?

    #include <iostream>
    
    using namespace std;
    
    #include <vector>
    
    
        int us[10000];
    
    class
    TeamsSelection{
    public: string simulate(vector <int> preference1, vector <int> preference2){
            int i, j; i = j = 0;
                    string s = "";
    
            while(i < preference1.size()){
                while(i < preference1.size() && us[preference1[i]] != 0) i++;
                us[preference1[i]] = 1;
                while(j < preference2.size() && us[preference2[j]] != 0) j++;
                us[preference2[j]] = 2;
            }
    
            for(j = 1; j <= preference1.size(); j++)
                s += char(us[j] + 48);
            return s;
        }
    };
    
    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +14 Проголосовать: не нравится

      Ты забыл запустить системные тесты. У тебя на 22ом тесте неправильный ответ. Для запуска системных тестов нужно зайти в меню "Practice Options" и кликнуть "Run System Test".

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