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

Автор Felix_Mate, история, 7 лет назад, По-русски

Хотелось бы узнать решение 2-х задач с тимуса

1)http://acm.timus.ru/problem.aspx?space=1&num=1677 Знаю, как её решать неоптимально (проблемы с ML, но не с TL). Можно получить точную дробь-ответ в длинной арифметике. У нас цепь маркова, переходы задаются с помощью граней префикса строки, состояния- префиксы длины 0,1,2,...n=len(s). Переход из состояния i в состояние j происходит с P=1/A (A-мощность алфавита), i<n и с P=1 из n в n. Можно написать соответствующие матожидания и получить СЛАУ. Решать СЛАУ можно за O(n), введя коэффициенты a[i],b[i] и с начального значения их пересчитывать. Проблема возникает с тем, что они быстро растут и потому ML. Код: https://ideone.com/41LFtk

2)http://acm.timus.ru/problem.aspx?space=1&num=1849 Думаю, что мой алгоритм верный, но где-то кроется баг (скорее всего в модулярной арифметике). Вначале утверждение: пусть есть прямая l x=xo+ut, y=yo+vt. Тогда точка x,y принадлежит l <=> xv-yu=xo*v-yo*u. Отсюда сделаем предпосчёт: фиксируем всевозможные направления векторов стрельбы vx,vy и каждой точке xk,yk сопоставим 2 числа:(e,t), где e=xk*v-yk*u и t=xk,если u=0, иначе t=yk. Получим класс cl[u][v]: {e1,t1}, {e2,t2}, ... , {en,tn}, который отсортируем по e, а при равных e по t. Теперь, получая луч (xo,yo,u,v), можно за O(logn) найти все точки лежащие на этой прямой (прямой, а не луче): нужны те точки, у которых e=xo*v-yo*u. Бинпоиском найдём в классе cl[u][v] границы alpha и beta. Среди этих точек нужны те, которые лежат на луче. Тут возможны случаи: если луч наклонный (например v>0), то тогда нужны точки с ординатой >= yo-ищем на [alpha, beta] бинпоиском по t, если луч горизонтальный (например u>0), то тогда нужны точки с абсциссой >= xo-ищем на [alpha, beta] бинпоиском по t (др. 2 случая аналогичны). Код: https://ideone.com/0Fm1CG

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

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

Автокомментарий: текст был обновлен пользователем Felix_Mate (предыдущая версия, новая версия, сравнить).

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

    За два месяца ситуация не изменилась? Вы не решили задачи?

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

      Вторую решил. Первую хз как решить (проблема с ML осталась)

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

        Если уж Вы ищете помощи у других, может быть попробовать сперва поискать в сети. "1677 timus" в пятерке будет решение на питоне которое заходит. https://github.com/tangjz/acm-icpc/blob/master/timus/1677.py

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

          Осознал ошибку :). Объяснение что происходит в программе здесь https://en.wikipedia.org/wiki/Autocorrelation_(words)

          P.S. Зарекся отвечать в русскоговорящем комьюнити. Даже после того как написал в чем заключается решение, продолжают лепить минуса. Всем успехов! :)

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

            Спасибо за найденный материал! Во-первых, я гуглил задачи, которые не мог решить. Мой поисковик тогда не нашёл ссылку на GitHub. Во-вторых, мне не особо интересно читать чьё-то решение. Я сдаю задачу, когда могу обосновать всю теорию. В английской википедии написаны взявшиеся с неба свойства, которые, видимо, позволяют решить задачу. Но так задачи нельзя решать! Нужно либо разобраться в теории либо самому что-то вывести.

            P.S. А что насчёт остальных задач?

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

              Мне кажется, что решение первой задачи можно найти здесь COCI, Contest 7, task: Klavir.

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

              Я не олимпиадник, я просто маску нашел .. ой я простой программист. Я не был знаком с задачей так же как и Вы. Попробую объяснить как это работает на практике. Решение не нужно для того чтобы его бездумно скопировать. Из решения можно понять что происходит. Ну как понять, я нифига не понял, понял только что считается какой то polynomial. Дальше гуглим "Random word Polynomial" не особо успешно, если это интересующая нас задача наверняка это будут простые примеры на алфавите из двух букв, каких ? Ну вероятно "random word polynomial aa ab". Первой статьей будет как не странно Autocorrelation. А дальше вы меня прям шокировали своим вопросом и обидели все вики сообщество. Что значит "написаны взявшиеся с неба", ни одну статью на вики не заапрувят с фактами взявшимися с неба там есть раздел References в нем находим.

              Flajolet and Sedgewick (2010). Analytic Combinatorics. New York: Cambridge University Press. pp. 60–61. ISBN 978-0-521-89806-5.

              У нас есть ISBN книги и более того страницы на которых это описанно 60-61.

              Гуглим pdf "978-0-521-89806-5" И находим. http://algo.inria.fr/flajolet/Publications/book.pdf

              Где на 60-61 описан тот же процесс что и на вики, и там же есть ссылка на доказательство на странице 212.

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

                В том то и дело, в вики очень часто даётся какое-то определение, а потом набор утверждений или свойств, которые не обосновываются (в самой вики), причём иногда и ссылки не дают обоснований для утверждений или свойств. Именно поэтому я и называю "взявшиеся с неба свойства". Кстати, фактов (точнее утверждений) в вики по IT и Math довольно много, и я сомневаюсь, что их пишут только математики и IT-специалисты, поэтому даже если и есть ссылки, утверждениям из вики нельзя доверять. Приходится читать лит-ру из ссылок (точнее вначале узнать, что она является нелиповой и нелживой), чтобы убедиться в правильности статьи.