Блог пользователя ivan.popelyshev

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

Пришло время восстановить потерянный вклад.

И ещё один финалист RCC сказал мне что в 5 утра у него бывают сильные тормоза. У нас есть шанс его порвать!

Соревнование начнётся в 5 утра по Москве

Да прибудет с нами Сила!

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

13 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Может все-таки SRM 519? :)
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Ouch, it'll be at 03:00 AM to me ._.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Это только у меня не работает арена?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится
    Да...не первый раз у тебя такое, мог бы заранее подготовиться :).
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Я за одну минуту успел зарегаться. Всё из-за тормозов dhcp в своей сетке, чуть не не успел
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      а я вроде зашел в арену в 04:56:56, и кнопка зарегаться уже не пахала((
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Все правильно, регистрация закрывается за 5 минут до "старого" времени начала контеста (т.е. в хх:55:00), а не за 5 минут до текущего времени начала (т.е. в хх:57:00).
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          аа, понятно..
          так-то я раньше вставал, просто тут в орленке света не было, включили минуты в 53 только как раз :(
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
эх, пришлось пожертвовать участием в SRM ради написания статьи про RCC :(
13 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Каюсь, исходник по Ахо-Корасик я скопипастил с решенной мной когда-то задачи Timus 1158 . :) Они очень похожи.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я тоже скопировал, только у меня очень тупое построение этого дерева.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится
    А я честно написал. =) Заодно вспомнил как его писать надо. =)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    да это уже прям prewrite-task получается...
13 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится
Когда я уже научусь считать? разумеется 26 = 32....
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    так а что не так? у тебя же 35 там?..
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Вместо небольшого плюса и хорошего настроения - опять 0 баллов и обвал в яму 1800-. 

    А все из-за 1<<q в 250.

    Вместо 1ll<<q



    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Тоже на одном из раундов на такой ошибке погорел. Теперь очень внимателен к таким вещам :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А ведь варнинги все палят.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Кстати, а можно настроить компилер (в частности студии) так, чтобы он с варнингами отказывался компилить вообще?
        • 13 лет назад, # ^ |
            Проголосовать: нравится +8 Проголосовать: не нравится
          Не знаю как на счет студии, но в gcc это флаг -Werror
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Понадобилось аналогичное и для gcc. Пытаюсь использовать -Werror, чето не получается.
            Компилю так:

            "C:\Program Files\CodeBlocks\MinGW\bin\g++.exe" -Werror main.cpp -o main.exe

            Скармливаю код, который точно должен вызывать варнинги. А он компилится совершенно молча.
            Как правильно делать?
            • 13 лет назад, # ^ |
                Проголосовать: нравится +5 Проголосовать: не нравится
              Хм... думаю стоит добавить еще флаг -Wall чтобы включить всевозможные варнинги.
              • 13 лет назад, # ^ |
                Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

                Пробовал, ничего не меняется.

                Такая строка:

                "C:\Program Files\CodeBlocks\MinGW\bin\g++.exe" -Wall -Werror main.cpp -o 

                • 13 лет назад, # ^ |
                    Проголосовать: нравится +5 Проголосовать: не нравится
                  Странно, у меня под убунтой все работает http://pastebin.com/06tncPZu
                  Можно ли посмотреть сам код и версию компилятора?
                  • 13 лет назад, # ^ |
                    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

                    Код первоначально был такой:

                    #include <iostream>
                    #include <fstream>

                    int main()
                    {
                       double d = 88.88;
                       int x = d;
                       long long a = 15455455454545LL;
                       int p = a;
                       std::cout << x+p;
                    }

                    с опасным приведением типов.

                    Только что выяснил, что использование неинициализированной переменной он все-таки палит.

                    Хочу чтоб плохое неявное приведение тоже палил.

                    Может gcc вообще такое опасным не считает? Не дай бог.

                    Проверил, при компиляции такого кода в арене варнинги есть.

                    =============================================

                    • 13 лет назад, # ^ |
                        Проголосовать: нравится +5 Проголосовать: не нравится
                      Очень интересно. Оказывается в -Wall не включена проверка на опасное неявное приведение и ее нужно включать отдельно! -Wall -Wconversion -Werror
                      http://pastebin.com/LqD105Dk
                      =============================================
                      • 13 лет назад, # ^ |
                        Rev. 5   Проголосовать: нравится +1 Проголосовать: не нравится

                        Большое спасибо.

                        =======================================

                        Небольшое продолжнение истории.

                        Нужно мне все это было для написания кода в KawigiEdit.

                        Добавив нужные флаги в строку компиляции кавиги, я с радостью обнаружил, что теперь не компилится стандартный код тестирования.

                        Выяснилось, что там переменная time объявлена как int, и ей бессовестно присваиваются дабловские значения.

                        Лечится это добавлением строчки

                        #pragma GCC diagnostic ignored "-Wconversion"

                        сразу после моего кода.

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

          Project -> Properties -> C/C++ -> Treat Warnings As Errors -> Yes.

          Думаю, это очень полезно.

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      То же самое... ;_;
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Как думаете, сколько будет 1<<(-1) ?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        0?
        • 13 лет назад, # ^ |
            Проголосовать: нравится +8 Проголосовать: не нравится
          По-моему должно быть -2^31. сейчас проверю.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Проверил сам, действительно -2^31.Странно, всегда думал, что будет 0.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Да, так и есть. Кто догадается почему?
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Хм...А вот если эти вычисления делать в long longe, будет -2^63.Может переполнение?
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                При переполнении был бы 0. Если, например , взять (4<<30).
                • 13 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  https://ideone.com/yqwpW
                  выглядит как нуль
                  • 13 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    Давайте проверим для разных платформ, я походу знаю только как Java это обрабатывает.
                    • 13 лет назад, # ^ |
                        Проголосовать: нравится +1 Проголосовать: не нравится
                      Это по разному у меня работало в дебаге и в релизе в студии 2005, давно было. А вообще стандарт ничего не гарантирует в случае если ты делаешь кривой сдвиг, (1 << (-1)) может оказаться равен сорока двум, и это будет по стандарту.
            • 13 лет назад, # ^ |
                Проголосовать: нравится +3 Проголосовать: не нравится
              Если сделать сдвиг, от второго аргумента берётся только актуальное количество последних битов (5 для int32, 6 для int64). Кажется, на уровне процессора, причём не любого.

              Например, вот цитата отсюда про 8086 и 80386:

              The shift is repeated the number of times indicated by the second operand, which is either an immediate number or the contents of the CL register. To reduce the maximum execution time, the 80386 does not allow shift counts greater than 31. If a shift count greater than 31 is attempted, only the bottom five bits of the shift count are used. (The 8086 uses all eight bits of the shift count.)
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        В студийном компиляторе у меня получился 0. А msdn прямо пишет:

        The results are undefined if the right operand of a shift expression is negative or if the right operand is greater than or equal to the number of bits in the (promoted) left operand.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Я почему-то думал что это везде одинаково, но я знаю только как Java это обрабатывает. Интересно как с другими платформами.
13 лет назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится
Скажите же, как решать 600? Ночью эта задача ужаснула меня и вогнала в постель.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Самым тупым образом строишь суфф. автомат (посмотри например моё решение), а потом динамику по (тек. позиция, тек. состояние автомата, маска по уже встретившимся словам). Причем изменения маски можно предрасчитать, а по тек. позиции сжать динамику (использовать только текущий слой и следующий)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    я сейчас в практисе загнал рекурсивное дп по (осталось символов, длины совпавших префиксов).
    чтобы не гонять массивы, все длины (до 6 чисел 0-50) запихиваются в один long.
    чтобы отдельно битовую маску не тащить, если строка повстречалась хоть раз, ее префикс фиксируется на максимуме.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +22 Проголосовать: не нравится
    вогнать в постель - это дьявольски круто звучит) возьму себе эту фразу на заметку =)