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

Автор LashaBukhnikashvili, 12 лет назад, перевод, По-русски

Всем привет....

Сегодня состоится очередной раунд COCI.

Желающие участвовать могут войти в систему/зарегиться здесь.

Для входа выберите COCI 2011/2012 — Contest #2.

Всем заранее желаю удачи...

UPD: появились результаты.

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

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

How solve problem D (AERODROM) ???

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

    you can view my O(N*T) solution where T=LOG(10^18)

    I use binary search for finding answer of 1-10^18 interval (10^18 max ans size in my opinion :D) I think this is correct,I will know in a few minutes

    UPD: This is correct.

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

    It isn't hard. Binary search in answer. I suppose you can easy understand my code: Aerodrom

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

    For M<300 000 I hope priority_queue (keeping in it Tk*how_many_people_occupy_it) solution works.

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

Как то 2 последние задачи на впихивание по памяти вышли. :(

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

    в предпоследней можно было строки отсортить. и с памятью все ок.

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

      Я думал над таким, но такое еще нужно загнать во время.

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

        нет, оно вообще легко заходит.

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

          Я очень не думал над реализацией, думал такое не зайдет. Видимо нужно было чуть больше посидеть над ней. :)

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

    Ага, как-то я не подумал, что маленький суммарный размер массивов — это еще не все. Сам dfs съел памяти больше, чем 32 МБ.

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

      И наложился вопрос: почему бы не поставить МЛЕ 256 МБ?

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

        Потому что это без такого ограничения, на мой взгляд, эта задача на 6ю не тянула.

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

          Ну тогда можно было сразу 8 МБ ставить. Хотя, с 32 МБ это вышло даже поучительно — иногда память съедается там, где вообще не ждешь.

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

            Ну я пока не представляю, как это можно запихнуть в 8 МБ, если разбивать каждый регистр на 32 вершины для BFS. Получаем, что одна очередь = 3.2М * 4. А как не разбивать я пока тоже не знаю, можно поделиться пожалуйста?

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

              Ну ответы можно хранить в массиве интов длины 100000. А насчет bfs — граф-то у нас специфический, так что в очереди одновременно сильно много чисел не могут находиться. Если писать с STL'евской queue, то память будет вовремя очищаться. Кстати, 7.7 МБ это если хранить граф списками смежности, создав 100000 векторов. Если же на массивах сделать, то еще меньше будет.

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

                ОК, спасибо, но тут всё-таки надо опираться на недоказанные вещи (что в очереди не будет много вершин одновременно — или это доказывается?), а с 32 МБ можно доказать что хватит на всех тестах, на всех языках (STL есть только в C++, а писать свой queue с выделением памяти — overkill) и не надо особо сильно извращаться, на мой взгляд. Так что по-моему, 8 всё-таки было бы перебором.

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

                  Если уже говорить о других языках, то закономерный вопрос: эта задача решается на Java?

                  Насчет размера очереди — я не знаю, как доказать что он маленький и всегда ли это так.

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

                  Как уже ниже рассказали можно с помощью СНМ. На Java зашло без проблем. Хотя BFS тоже должен зайти, ребер мало, надо только очередь хранить.

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

      А если то же самое сделать bfs-ом, то проходит все тесты, заюзав максимум 7.7МБ. Задача на то, чтобы попихать.

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

Individual results update!

UPD: My score is 350(50+80+100+120)

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

Is problem F(PROCESOR) a graph problem?

I'm sorry if this question is really stupid :(

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

    Yes, it is 2-SAT problem. But memory limit is realy stupid.

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

      Can you explain more why problem F is 2-SAT problem? Thanks

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

      Why is it 2-SAT? You have a graph (32*N vertices) with edges which demand either different numbers on endpoints or the same. You can just DFS/BFS it to enumerate each connected component and since each component can be easily inverted — you can take the most significant vertice and assign 0 to it at the start of DFS/BFS.

      The only challenging point is to get it into memory limit.

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

        And you can get into memory limit by making 2 optimizations:

        1. While you have 32*E edges, don't store 32*E edges, store just E, which I will call multiedge. Since every multiedge generates exactly one edge for each vertice in the given register, we can decode it while doing DFS/BFS.

        2. Use BFS, since it haven't got any overhead from recursion. Hence you only need 2 3.2M element arrays — one of char for storing assign bits (and simultaneously checking if we have been in that vertice) and one of int for the BFS queue.

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

          We can use non-recursive DFS as well.

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

            But why? BFS is meant to be non-recursive, while in DFS you would have to store a lot more information about each vertice to be able to emulate recursion. So it might not pass in ML either, or I am missing something.

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

              I don't understand. Can't we just change queue to stack?

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

                Yeah, but you still need more information, like the pointer of what neighbor of that vertice we are currently analyzing.

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

                  Why? I always wrote non-recursive BFS and DFS with the only difference of queue and stack. Or do you mean some specifics of your solution for this problem?

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

    Yes, you can use a modified Union-Find.

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

I had a bug in task 6 , when I finded it, the cotest ended :( This is my corrected code.

UPD: my score is 453

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

    You still have 64 points — you got MLE.

    Sorry, I don't mean to be rude, but your comment easily suggests that you claim that you have full solution to 6th task.

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

My score is 490(50+80+100+120+140+0). I couldn't find any solution on the last problem T.T

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

Weak tests in problem AERODROM My solution fails test:

30 1000
1 1 1 1 ... 1 1 1

but passes systests. Have anybody the same bug?

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

    Not only that — shouldn't you have long long overflow in this case?

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

      Yes, and in my test I have overflow too.

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

        Well, luck is on your side then. :) Maybe they haven't thought of this specific error, while generating the test, although I thought that this could be the place where many could fail. But as it depends on binary search values, and from a quick look you have a little bit different binary search from what I usually see people writing (either not changing middle value at all when assigning it, or changing but only in one case, not in both), maybe you got away with this for that reason.

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

    My solution is similar to your, but I set the bound to 2e18, and it fails on systests (105/120). Our solutions have the same bug, but I have less points than you have. It seems strange.

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

      I'm lucky today. I think it's impossible to catch all bugs using 8 tests.

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

    Imho, it's very bad idea to test solutions on less than 10 test cases (for example, today's task "malcolm" has only 5 tests)... Then I see so few tests, I remember informatics olympiads in my school, where we always have 5 tests, and almost everything passes them ;)

    PS and, ofc, I have the same bug as tunyash in aerodrom, but my solution gets full score...wtf

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

Why am I getting "SIGABRT" while I am not using any assert method out there?

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

    It seems that it is Memory Limit Exceeded.

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

      Then why? Isn't HERKABE supposed to be solved using trie? so keeping 3000 int-s and err... up to 3000*3000 nodes (which consists of two int-s one vector).

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

        I also submitted a solution with trie, but got lots of MLE. In the end you can do it by sorting the strings, and counting recursively, simulating you've got a trie.

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

          I solved that by sorting the strings, but I don't know why it works in time. I just used strcmp to sort. Here's the code

          Is just STL sort is fast to sort strings?

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

            Does this solution passed from all the test cases? It seems wrong at the following: 6 aa aa ab ab a a

            The correct answer should be 12 while this program outputs 6. I also used same technique as you, it seems that each function GetResult with unique parameter set corresponds to each node of the trie with which participants tried to solve this problem with. Therefore, our solutions seem to be base on creating this trie implicitly. :)

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

              "The names are distinct and given in no particular order."

              So, that test case isn't valid. :)

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

32MB is a ridiculously small memory limit...

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

This is the first time I participated to COCI, so I want to know when they usually publish results.

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

    As i thought, when I saw the problems after the contest — many guys with maximum score.

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

is there any way to log in there now?

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

when is the next round of this contest ?