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

Автор shettynamit, 12 лет назад, По-английски

EDIT: Solutions are available @ http://www.bitwise.iitkgp.ernet.in/solutions

Hi all, Bitwise is an algorithm intensive programming contest organised by the Department of Computer Science and Engineering of IIT Kharagpur. Prizes worth $4000 (INR 2 Lakhs) are on the cards. Allowed Programming Languages are C/C++/Java.

Bitwise is scheduled to be on 12th February 2012. The Contest will start at 1030 hrs and end at 2230 hrs (UTC)

Register here: http://www.bitwise.iitkgp.ernet.in/register Main Website: http://www.bitwise.iitkgp.ernet.in/home

The break up of the prizes are as follows:-

Global Top 3:- 1st Place: 60,000 INR (~**1200** USD) 2nd Place: 35,000 INR (~ 700 USD) 3rd Place: 25,000 INR (~ 500 USD)

Indian Top 3:- 1st Place: 10,000 INR 2nd Place: 6,000 INR 3rd Place: 4,000 INR

There are other prizes for the global Top 20 as well — http://www.bitwise.iitkgp.ernet.in/home#prizes. So don't forget to participate!

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

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

Неправильная локаль

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

For the God sake, it is 2012. Still no Java?

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

Even if they include java, there is very bleak(small) chance for any java coder wining, because the scores are evaluated on the basis of correctness, TIME and SPACE efficiency.

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

    Actually there is standard tl and ml, at least that was the case for some last years

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

    As Egor correctly pointed out, there is a standard time and memory limit. Your solution just has to be within those limits — then you would be given full credit!

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

      Now it is clear. When I read the FAQ's on website I misunderstood the context of time and memory limit.

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

During Bitwise 2011, there was a problem which allowed precalculation of answers to all possible test cases on a local computer and then sending a simple program that just prints the right answers. Doing so is pretty legal in a number of other contests. However, in the middle of the contest, a rule appeared which informally rejected such submissions. From a participant's point of view, it was a bit inconvenient to see the rules change in the middle of the contest.

If you plan to include a problem which allows precalculation in Bitwise 2012, please either accept such solutions entirely or make a clear and formal rule against them and publish it in the competition rules and/or the problem statement.

To disallow such solutions in a formal way, there is often a limit on the source code size (e. g., 50 000 bytes on CodeChef or Sphere Online Judge, 256 KB on some ACM ICPC contests).

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

    @Gassa: Yes, I am aware of the fact (on the receiving end as a participant). Rest assured, it won't happen this time. Thanks for the suggestion about the source limit. We will specify beforehand in the problem statement/Rules about any such limits.

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

Do I understand correctly that C++ programs will be compiled without -O2 flag?

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

Can you clarify about prizes, like if someone is in both list, global and india, then will they be counted in both list ?

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

    Well, no. But they will get the better of the two. So if an Indian comes in Global Top 3, then he gets the global prize.

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

      so, the 11th place in India will slide-up, right ?

      like if "x" comes in global top-3. then also the indian list will have 10 names excluding his name.

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

I cannot submit as of now, rights?

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

Java compiler considers warnings as errors, can you fix this?

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

    We are working on this...it requires some changes in our system because of -Xlint warnings. Please try removing the warnings for now.

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

Ну как, как, блин, эта третья решается?

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

    я вот так и не понял вв чем там подвох. тоже не сдалась. я решал деревом отрезков, тестил долго....

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

      Ну, если тупо деревом отрезков, то там слишком большие числа получаются в длинке и это проходит 1 тест — на втором тл

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

        так там же по модулю.

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

          Ну а как зная модули двух чисел найти их НОК?

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

            nok(a,b) = (a*b) * inv( gcd(a,b) ). а обратный элемент по модулю простого числа через возведение в степень.

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

              а как найти gcd двух чисел, если мы их знаем только по модулю?

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

              даблпост (100 лет ведь уже не было, да?)

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

                да, я ступил) забыл, про остаток от деления в gcd. видимо, лучше было хранить в дереве разложение на простые.

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

                  Вот что-то в таком духе, только не в дереве, конечно (это ж лишний логарифм) проходит таки 4 теста из 5 (а на 5м — тл)

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

                  ну у меня быстро работало не смотря на возмедение в степень за логорифм, намного меньше секунды на макс тесте. нужно только, хорошо организовать хранение этого разложения... хотя, может, можно как нить свести к поиску максимума в окне с помощью стэка. типа, по каждому простому, но их много конечно...

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

              Утешили, оказалось, я не один такой... Потерял наверно час, чтобы понять, что я у себя уже четко нахожу НОК, зная НОД... но не могу найти НОД, используя модульную арифметику.

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

    У нас следующее решение было. Понятно, что различных простых чисел, на которые делится что-нибудь из инпута, будет не очень много (порядка 10^6 в худшем случае). Для каждого из них заведем multiset степеней, которые входят в текущий НОК + будем поддерживать текущее значение НОКа по модулю. Ну и далее аккуратно удаляем/добавляем по одному числу — перебираем все простые числа, на которые оно делится, обновляем соответствующий multiset и пересчитываем НОК.

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

      А я делал не мультисет, а вектор – степени же простых маленькие, казалось бы должно работать быстро, но не удалось пройти ни одного теста, если у вас сохранился код, можно посмотреть?

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

      Мы делали так же, но не стеснялись не искать все простые заранее, а хранить map<int,multiset >.

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

    Сдали такое решение. Посчитаем сначала простые до корня из миллиарда. Далее. будем проходить по числам из ввода, и для каждого маленького простого числа считать, с какой степенью оно входит в число из ввода заодно и деля на эти простые. Запомним эти показатели, дальше для них решим задачу минимум на отрезке за О(1), и будем его двигать. Обновим текущие ответы, и продолжим так для маленьких простых. Теперь получим, что каждое число после этого — это либо 1, либо какое-то простое, больше корня из миллиарда. по ним можно пройтись уже мультисетом за один проход.

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

      Значит Java такая Java. У меня было в том же духе

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

Nice contest! :)

Can somebody explain how to solve P2?

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

    We will release the solutions soon :)

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

    I solved it using min cost max flow. At first you make add edge of capacity 1 and weight 0 for each pair of prefernces as well from source to each student. Also we will add edge from each faculty to sink with capacity 1 and weight 1. Then we will find flow of size 1 n times and if all edges from faculty to sink are filled add one more edge with capacity 1 and weight (number of allready added edges from this faculty to sink) + 1

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

      This can be solved with just max flow, without costs. We can initially set the capacities of the edges from faculties to sink to 1, then find the max flow, then increase these capacities to 2, then augment the flow while possible, then increase capacities again etc. A similar problem was in Petrozavodsk once, and this was the author's solution.

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

В восьмой (поцелуй дементора) динамика по дереву, или какая-то тупая жадность проходила?

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

    У меня несложная динамика по дереву: найдем для каждой вершины

    • количество вершин в поддереве,

    • сумму расстояний от нее до вершин в поддереве,

    • ответ в ее поддереве, если в нее сверху входит путь.

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

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

Как решалась 5?

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

    Мы делали следующим образом.

    Рассмотрим какое-то число g, такое что 1 ≤ g ≤ k = min(n, m). Найдем, сумму попарных произведений для всех пар чисел (u, v) таких что 1 ≤ u ≤ x, 1 ≤ v ≤ y и gcd(u, v) = g. Сразу будем искать эту сумму деленную на g2. Обозначим ее сумму через f(g). Пусть h(g) = (n / g)(n / g + 1)(m / g)(m / g + 1) / 4. Деление везде выполняется с округлением вниз. Тогда можно записать . Последняя формула взята из тех соображений, что h(g) — это количество не только искомых пар чисел, а и тех пар, у которых gcd делится на g. Ответом на задачу является сумма f(g) по всем g, которые не делятся на квадрат простого.

    Эту формулу можно посчитать за O(klog(k)). Если в ней явно раскрыть все скобки, то получим следующую формулу: , где m(i) — функция Мебиуса.

    Теперь заметим, что вне зависимости от n и m в сумме выше каждое h(g) фигурирует в ней с одним и тем же коэффициентом. Значит, можно заранее предпосчитать для всех чисел до миллиона эти коэффициенты и потом их использовать. Теперь решение линейное и проходит 4 теста.

    Осталось заметить, что в формуле для подсчета h(g) используются величины n / g и m / g, которые могут принимать не более и значений, соответственно. Значит, можно посчитать частичные суммы коэффициентов и затем прыгать счетчиком цикла сразу так, чтобы либо n / g, либо m / g изменилось. Выходит препроцессинг за O(PlogP) и ответ на запрос за . Здесь P = 1000000. Это проходит все тесты.

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

      Здорово). Ни у кого проще не было?

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

      На Java это проходило 3 теста из 5, дальше TL. Зато Катя (моя жена и заодно teammate на этот контест) сумела свернуть это дело дальше. Предрассчитаем две функции, а именно — во-первых, сумму чисел от 1 до i, а во вторых такую хитрую функцию — для чисел, несвободных от кубов — 0, для остальных — пусть pi — те простые, которые входят во второй степени, а qi — те, которые в первой, всего простых k. Тогда . Теперь ответ для x, y — это .

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

        Это за линию пашет?

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

          По модулю решета Эратосфена — да

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

            Я имел в виду ответ на 1 запрос.

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

              На запрос — да, линия

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

                Круто, у нас линия так и не впихнулась. Пока до корня не соптимайзили, не проходило 5 тест.

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

                  Ох, это я читать, значит, не умею :) У нас сначала было ваше решение за nlog, а потом сразу это, которое сразу прошло

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

        Я делал также. На C++ 5 тест ТЛился. Но после всяких оптимайзов удалось это сдать на C.

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

Получается, что P7 идентична 87C - Интересная игра.

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

Thanks for a nice contest.

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

How to do Problem 3? I maintained the maximum power of the primes and when a new number is added I check with the current maximum power, if its more than answer is multiplied by prime raised to difference in power. When a number is removed and this was the number with maximum power, the answer is multiplied by the inverse of prime raised to difference in its power and the new maximum. I have used deque as the data structure.

It got WA. However, I am not able to find any test cases on which the code fails. Here is the code.

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

    Ah, i got the mistake. I didn't kept the prime powers which were greater than 10^5.

    Sorry for the trouble.

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

Solutions to Bitwise 2012 are up! You can view them here: http://www.bitwise.iitkgp.ernet.in/solutions

Hope every1 njoyed Bitwise this year!

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

    Since rudradevbasak is in two of the lists, and he will get the better of the two prizes, then why not slide-up the 11th place holder ?

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

      Even though Rudradev is 4th globally, he is the Indian topper. So he has the option of 10,000 INR or a 16GB pendrive (for global 4th). Its not hard to see that the 10K INR is a better option for him. So we had already slided up the global 21st position

      Hope that answers your question.

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

    Omg, we passed problem 1 by solution with Tutte matrix and used all 20 attempts

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

Unable to view the solutions?