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

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

Добро пожаловать на Codeforces Beta Round #18

Авторы задач сегодняшнего контеста: Михаил Мирзаянов, Эдвард Давтян и я. Спасибо Дмитрию Матову за помощь в подготовке условий и Юлии Сатушиной за перевод задач на английский язык.

Всем удачи!

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

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Я не знаю какое решение подразумевается в Е, но я не считаю что стоит так притеснять java, моё решение не уложилось в TL, а переписанное на С++ прошло за 560 мс.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Заслал на Java. Полное решение     660 мс     41436 Кб

    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Сори перепутал букву задачи. Оба поста можно удалить.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Ну вот что за бред? Задача A - не проходит вообще. WA 2, хотя на компьютере выдает ответ NEITHER. На сервере же неизвестно что. С чем это вообще может быть связано?
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Может быть проинициализирована переменная или же тесты не совпадают 
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Тест ровно тот же, что и в условии
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Сегодня во всех задачах тесты из условия совпадали с первыми тестами. Может быть, отличаются версии компилятора?
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ты делал копипаст из условия или сам писал ?
14 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится
Будет ли разбор от авторов? Или я могу написать?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Is it intentional that now the only way to submit is to select a file instead of pasting the code? I made a pair or mistakes because of that, because using the current way forces me to lose the tab with the problem.

Is it possible to restore the submit pasting functionality back?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Nice problems!
I like them all.. :)

Well, when will the tutorial of this round
announced?
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Participant ArtDitel told that he will write it. Lets wait!
  • 14 лет назад, # ^ |
      Проголосовать: нравится +13 Проголосовать: не нравится
    If you want a quick overview...

    Problem A - Geometry with *many* possible solutions including Pythagoras's Theorem, checking for perpendicular line segments, using trigonometry to test angles...

    Problem B - Simulation, with modular arithmetic to speed things up

    Problem C - If you keep track of the sum to the right of a point, and the sum to the left of a point, you can compute the new left-hand and right-hand sums by just subtracting one number from one sum, and adding it to the other. In this way, you can try all possible cuts in O(n)

    Problem D - This can be done as a Weighted Interval Scheduling DP, though as a friend pointed out, 2^x > 2^(x-1) + 2^(x-2) + ... + 2^0, so you can just take the largest intervals first, greedily, because they will be worth more than all other intervals that they conflict with.

    Problem E - Row by Row DP. Determine all possible chequerings for one row, and get the cost of using that chequering (which can be done in constant time, not O(n)!). Then for the next row, try all possible chequerings and see which ones are compatible with the row above. Take the minimum cost of these. This is ~650x650x500 which is just a *bit* too slow. But if you sort the results of the previous row by cost, you can get an answer closer to 650*500.

    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      what can be test#31 for problem A-Triangle?
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Hmm.., we don't know.. ;)
        because testdata are hidden..
        • 14 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится
          I found that, Actually its related to "checking  whether length of sides becomes zero , while changing the points"
          example(as suggested by RAD)
          0 0 1 0 4 1

          Thanks RAD
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        I am also interested about case 31 for problem A. can anyone(admin/problem writer) tell us what can be the case?
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        I am also interested about case 31 for problem A. can anyone(admin/problem writer) tell us what can be the case?
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Consider three points in a line
        like 0 0 0 1 0 3
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      I'm a rookie about algorithm, i just interested in the Weighted Interval Scheduling DP method, can somebody offer me more information about that?  thx a lot! :)

      • 14 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        This lecture explains the O(n^2) WIS algorithm pretty nicely: http://www.cs.illinois.edu/class/fa08/cs473/Lectures/lecture12.pdf

        There's also an O(n log n) algorithm, but it's a bit more complicated: http://pages.cs.wisc.edu/~shuchi/courses/787-F09/scribe-notes/lec3.pdf

        The UVa online judge has a list of Dynamic Programming problems: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114

        I can't recall any UVa problems that are Weighted Interval Scheduling though... but solving DP problems will help you with other DP problems because they all have important similarities.


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

          thank you so much!

          i never expect somebody may answer such a primary question so detailed!

          thank you very much!

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

          I have never heard of Weighted Interval Scheduling DP before. Thanks for sharing your resource. You sir, are awesome! :D

          Here, I found another source:

          www.cs.cornell.edu/courses/cs482/2007su/dynamic.pdf

          This contains both N^2 and NlogN idea.

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А куда делась отсылка текстом а не файлом? Или ее убрали специально?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А задачу Е можно свести к задаче о решении системы линейных уравнений?
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    В задаче Е можно использовать динамику по номеру строки и буквам, которые чередуются в ней.
    Пусть f(i,a1,a2) равно наименьшему количеству измененных символов, требуемому для того чтобы первые i строк стали подходящими и в строке i чередовались символы a1 и a2 (a1!=a2).
    Тогда запишем f(i,a1,a2)=min{f(i-1,b1,b2) | a1!=b1 && a2!=b2 && b1!=b2}+cost(i,a1,a2), где cost(i,a1,a2) - количество изменений, необходимое для того чтобы в строке i чередовались символы a1 и a2.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      И это O (n * 26 ^ 4), верно? Это заходит?)
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Успевает меньше чем за секунду. Можно ускорить до O(n*26^3), если после подсчета f(i,a1,a2) для всех a1 и a2 пересчитывать матрицу M, элемент M(a1,a2) которой равен min{f(i,b1,b2} | | a1!=b1 && a2!=b2 && b1!=b2}. Заметим, что из f(i,j,*) мы возьмем минимум, либо второй минимум. Значит, матрицу M посчитать можно за куб. Думаю, если еще подумать, то можно ускорить и до квадрата :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Когда вижу длинные числа, всегда кажется что притесняется C++ :)
Как работать с длинной арифметикой, в задаче D, например? Разрешается ли пользоваться заготовленным кодом?
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я пишу на C++. Но если на контесте попадётся задача на длинку то я включаю Eclipse
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      И пишете на C++ в Eclipse?
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Непонятка вышла. Не на С++ я пишу в фаре, а в Eclipse пишу на Java (несмотря на то что не умею писать на Java :))
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Помоему написать свою длинку дело 15 минут )) к тому же тут нету сложных операций ;) (Деление, извлечение корня, быстрого умножения)
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    15 минут из 120 - время. На Java ведь их не надо тратить. При составлении задач, похоже, на длинную арифметику уже никто внимания не обращает. Означает ли это, что заготовки кода разрешены?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А почему нет? В конце концов ты у себя дома пишешь
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Ну ок, и то правда. Будем считать, что разрешено всё, что не запрещено.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Я считаю, что заготовки нельзя использовать и разрешать (конечно нельзя отследить никак, но все же), так как таким образом человек может просто скопипастить любой стандартный алгоритм.

        Так что задачи на длинную арифметику - абсолютное зло

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

          Что собственно все и делают, потому что это нормально.
          Идиотизм-то как раз таки по 200 раз писать один и тот же алгоритм.

          Например я давно для себя сделал штучку типа skidanovalex.ru/ahelper.html, чтобы не зависимо от того, откуда я пишу, все нужные алгоритмы были со мной :о)

          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            прикольно =) ... похоже ты сейчас не один будешь пользоваться своей штучкой )
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Меня крайне порадовал контраст:
            "I'm a computer programmer. I like coding a lot, and not so long ago I was one of the best tough-algorithms coder in the world.
            Here's the list of my selected achievements. Some of the scoreboards...
            "
            Русская версия - Если в двух словах - я программист и металлюга :о)
            И дальше по тексту... :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

у кого нибудь в задаче Д были проблемы с 4-м тестом?

можете привести контрпример или вспомнить в чем была ошибка?

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ты решение сначала напиши)))
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      не понял?

      идею сюда написать? или имеете в виду что я не отправлял решения?

      ЗЫ если второе то будьте внимательнее у меня и во время и после контеста есть отправленные решения

  • 14 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    Всё зависит от твоего решения. В моём решении была проблема, что я проверял на юзанность не весь отрезок, а только концы. 
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Если еще нужно, 4й тест:
    10
    sell 179
    win 1278
    sell 1278
    win 179
    win 788
    sell 788
    win 1819
    win 1278
    sell 1454
    sell 1819
14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Hi,i'm  a newbie
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Контест классный! Мне очень понравился! Но по-моему для второго дивизиона несколько сложноват... Впрочем, прошлый контест для второго дивизиона был слишком простой. Надо искать золотую середину...
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Вопрос совести ? )) всё равно никто контролировать не будет, а можно научится кодить на Java или Python
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Не хочу Java или Python :)
    Участники должны быть в равных условиях. Видимо, это означает, что единственно верный вывод - разрешить любые заготовки. Кроме всего прочего, это более естественно.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      ну вот у Java проблемы вечные с тл там, где решения на плюсах легко проходит. У всего есть свои плюсы и минусы
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Nice problems!

I have a question though. How am I supposed to include the BigInt class in my solution? I'm writing in C#.
Thanks!
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    long long int i guess.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      How do I declare a long long int?
      and is it enough to hold 2^2000?
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        I dont know about C# but as for C/C++ long long int can cover only 2^63 . long long unsigned can 2^64
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          So how could this be solved in C#?
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            In .NET 4.0:

            using System.Numerics;

            BigInteger a;

            Then you can use it as a regular integer number. All the operators are overloaded, so you can easily do something like that:

            BigInteger a = BigInteger.Parse( Console.ReadLine( ) );
            BigInteger b = BigInteger.Parse( Console.ReadLine( ) );
            BigInteger c = a + b;

            But AFAIR this server doesn't support .NET 4.0, so anyway you will need to implement big integers by hands if you want to solve that problem using C#.

14 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится
14 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится
For D I could find the greedy solution but can't do it in time because I have to right a big int power :(  I hate big int. Why you just can ask for a moded result?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Эх, время контеста неудачное было. Чемпионат мира оказался приоритетнее :) Главное - не поставьте контест параллельно с финалом =)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
1 ) Во время контеста у многих участников задача В валилась на 16-м тесте?
2) что за 16-й тест ? :)

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я задачу B сдал с 13 попытки. У меня были: 
    3 ошибки на 10 тесте
    2 ошибки на 3 тесте
    3 ТЛ на 25 тесте
    2 ошибки времени исполнения
    и по одному разу-ВА на первом тесте и ТЛ на первом тесте
    Как видишь, 16 теста среди них нет))))