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

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

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
  • Проголосовать: не нравится

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

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

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

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -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.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +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).

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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.

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

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

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

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

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

I cannot submit as of now, rights?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Nice contest! :)

Can somebody explain how to solve P2?

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

    We will release the solutions soon :)

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 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

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

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

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

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

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

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

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

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

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

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

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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. Это проходит все тесты.

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

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

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

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

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

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

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

Thanks for a nice contest.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 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.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 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!

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

Unable to view the solutions?