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

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

Всем привет!

Сегодня в 19:30 по Московскому времени состоится раунд Codeforces #238. Контест пройдёт в обоих дивизиях.

Раунд был подготовлен мной и cfk. Это мой 4-ый раунд и 2-ой раунд Кришьяниса. В этот раз, по-моему, задачи весьма необычные и, может, даже неожиданные. Мы уверены, что любой участник(ца) найдёт себе задачу по вкусу! Но нужно её найти. (:

Как всегда, спасибо Михаилу Мирзаянову (MikeMirzayanov) за проект Codeforces и систему Polygon, и Марии Беловой (Delinur) за перевод условий. Большое спасибо Геральду Агапову (Gerald) за помощь в подготовке контеста. Мне и Геральду повезло обсудить задачи очно во время зимних Петрозаводских сборов, что, по-моему, оказалось очень полезно.

Мы желаем вам захватывающего раунда!

UPD1: Распределение баллов:

DivI: 500 1000 2000 2000 2500

DivII: 500 1000 1500 2000 3000

Баллы выставлены относительно, чтобы стоимость каждой задачи делилась на 500, и была бы ближе к объективной оценке. Не пугайтесь, на самом деле задачи не настолько сложные. (:

UPD2: Поздравляем победителей!

DivI:

  1. al13n
  2. Shef
  3. scott_wu
  4. sillycross
  5. Komaki

DivII:

  1. NelsonMondialu
  2. L_Ecry
  3. aaaaAaaaaAaaaaAaaaaA
  4. xorfire
  5. Hec

UPD3: Замечательная статистика раунда от DmitriyH.

UPD4: Разбор опубликован здесь.

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

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

"Problems will be unusual and surprising". Hmmm... Sounds interesting. Good luck to everybody...!!!

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

Пора домой в желтые.

UPD Договорился ;(

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

First Contest in Iran's New year and unusuall problems!! Great!!

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

Every contest anybody has new year and should write about it. It's sooo interesting for us!

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

    No, hardly every contest. Count contests per year and think: could there really be so many existing calendars?

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

On this round I wish all high ranking.

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

    what about other rounds you still wish same thing

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

      Not to mention his "wish" is impossible because everyone can't get high ranking. Unless almost nobody solves anything.

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

        or all solve problems with same final score with probability
        0.0000000000000000000000000000000000000000000001

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

      Please don't in those little details

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

wish all participants a very happy Match ^_^

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

This round will be even unusual and surprising for me, if my solution of Problem-C gets AC and fails system test of Problem-A :)

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

Ёмкий набор тегов: codeforces, раунд, фармить вклад

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

Hi all, wanted to ask a simple query. How to find name of blogs in a tabled manner, In the right panel titled "Recent Actions", If I click on detailed, I can see comments of people over different blogs, But I dont want that. I want to see more number of blogs similar to ones shown in that panel itself. Eg. I would like to see around 30 entry per page for Recent actions, Is the any such option available somewhere on codeforces?

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

My first D1 round. So exited :O #mlc

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

E is 3000 seems that opening it during contest time is useless :D

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Комментарий удален по причине нарушения правил Codeforces
  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Комментарий удален по причине нарушения правил Codeforces
»
10 лет назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится

Loving the pretty pictures.

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

Thanks for the contest I really really enjoyed C in DIV2 ;-) It's amazing problem !!!

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

    I was going into BIT ideas, Then I thought that why is GF(2) given, find solution was really cute =D

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

    Div1-A/Div2-C, aka "how to solve a problem while ignoring over half of the input". Pretty nice :P

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

Авторами подразумевалось, что Div2(C) в TL влезает с асимптотикой O(n^2 + nq)? С такой асимптотикой решение, которое я пытался взломать, приблизительно 0.75 секунд работает.

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

    Чисто за n2 + nq не подразумевалось. За (n2 + nq) / 32 — может быть. То решение прошло тесты?

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

      Нет, не прошло. Я торопился, и составил тест из 10^6 запросов на инвертирование одной и той же строки. Скорее всего, оно хорошо кешировалось и из-за этого залезло в TL, с инвертированием столбца было бы иначе.

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

        Ясно. Народ, а кто-нибудь сдал какое-нибудь решение с битсетами?

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

          А такое решение вообще есть?)

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

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

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

Awesome problems. I really enjoyed solving C and D. Thanks for the contest.

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

Haha, I spent most of time on problem C and didn't solve it. :( Good contest though.

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

Very nice problemset, I found my problem! It was Div1 C :)

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

Nice contest, the pretty complicated at first Div1 A turned out to be awsome. What was the main idea behind D? I used a stack and LCA, but got WA. I imagined that the stack part was wrong, but couldn't find any counterexample after looking for it 10 minutes. Do you have one? (I would like to add that the stack used line intesections, not just simple comparisons)

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

    Stack works when you can't see a hill again after removing it, which doesn't work in this case.

    The LCA is correct (that's pretty easy to see). To find the next hill a climber goes to from hill i, you add the points from right to left, remember the top convex hull (well, it's actually a concave curve, but it uses the same idea as convex hull algorithm) of these points, update it when adding points and always pick the leftmost point in the hull so far (after the just added point, from which the climbers go to the next point of the hull). This can be done using vector cross product — as long as the leftmost 2 points of the hull (if they exist) are placed in such a way that the leftmost one is below the line from the just being added point to the one to its right, you remove the leftmost point of the hull — because it won't be in the top convex curve ever again. It works the same way as the standard convex hull algorithm.

    Another contest where D appears simpler than C. At least to those who are used to more algorithmic problems — like me :D. Too bad I missed the start of the contest (thanks to the modern world's stupid shopping obsession), I think I could've done well.

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

      Thanks a lot for the pointers, In order to understand why my stack is not right, do you have a small handly counterexemple? thanks.

      Edit: I tried to build a counterexample like this:

             |   
             |
             |
             |
        |    |
      | |  | | 
      1 2  3 4
      (In reversed order, from right to left)
      

      On an exemple like this, my stack alg runs as follows:

      Push 1
      make_edge(1,2) (i will not write these from now on)
      Push 2
      try to pop the stack -> verify whether or not line segment 1 3 passes through hill 2 -> no -> no pop
      Push 3
      try to pop the stack -> 2 4 is above 3, so we pop the stack
      try to pop the stack -> 4 1 is above 2, so we pop the stack
      (make edge 1,4)
      Push 4
      

      And now we have our tree, on which we apply a LCA algorithm.

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

        Depends on the exact approach. Just be satisfied with the general guideline that stack is useful if you're sure that you can't use a discarded element again. In this case, it fails because heights of hills can vary greatly — you can discard and use again any hill many times.

        If you want a good counterexample, you can always look for it yourself — try the case that gives WA; if it's too large, try generating your own and comparing against AC solutions, etc etc.

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

          I edited my approach ^, I also corrected a few small mistakes and got ACC. Please note that my stack pop criterion is geometry heavy, something like

          if(((1ll*stack[poz].x-stack[poz-1].x)*(1ll*v[i].h-stack[poz-1].h))<((1ll*stack[poz].h &mdash; 1ll*stack[poz-1].h)*(1ll*v[i].x-1ll*stack[poz-1].x)))
          

          No need to try to understand the formulas, all I did was to check if a segment intersects another.

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

            It could quite possibly be the same thing I was talking about. (Convex hull can as well be implemented with stack.) I just expect an algorithm that's called just "stack" to have storing the hills on a stack to be the most complex idea in it :D

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

My best performance in cf ever(Div2 5th place wink). Thanks a lot for the mathy contest :D

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

    And I am probably going to fall at my lowest rating in the last 2 years or so. Last two contests have been miserable for me. Making a lot of silly mistakes, I dont know what has happened. :( T_T . But both of these contest had very exciting problems.

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

Почему 6106684 ловит TL на претестах?

ios_base::sync_with_stdio(0); есть, и входные/выходные данные не double.

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

    Вывод по одному символу. Такие решения у нас работали по 4 секунды.

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

      А почему так?

      Действительно, если поменять на

      if (tp==3){av.push_back(res);}
      
      for (int i=0;i<av.size();i++)
      {
       cout<<av[i];
      }
      

      то АС за 0.218 — 6117108

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

        Я даже не знаю, если честно... Призываются мастеры С++.

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

        удалил

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

        Дело в том, что при попытке ввода, неявно вызывается cout.flush(). Это связанно с тем, что в консоли перед тем, как запросить кокой-либо ввод от пользователя, необходимо показать ему последний вывод, а значит отчистить буфер. Решается это строкой: cin.tie(nullptr);

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

          Спасибо, 6117776 — заработало.

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

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

            Не, эта строка всего-лишь "отвязывает" cin от cout. Просто не будет cout.flush(); вызываться, не более.

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

        Я имею ввиду, с командой ios_base::sync_with_stdio(0), а не scanf/printf.

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

        Имеется в виду использование cout

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

        Я, конечно, еще вчера писал на паскале, но, кажется, printf != cout.

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

Nice contest! Interesting and solvable problem :)

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

Объясните, пожалуйста, популярно, почему каждый флип меняет парность ответа?

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

    раскрой скобки в выражении

    там получится что ответом является сумма произведений диагональных элементов

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

      аааа, тьфууу.. вот дурак.. Заметил, что каждый два раза, но протупил выбрасывть их.. спасибо

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

      А если точнее, то просто сумма диагональных элементов. А каждый флип просто инкрементит ответ.

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

Как искать в задаче Div1-D для конкретной горы a нужную нам(правую) гору b

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

    Изначально скажем, что этот "предок" — первая справа гора, если такая вообще есть.

    Далее будем делать итеративный "подъем" — если наш предок не закрывает видимость на своего предка, то делаем нашим предком предка нашего предка. Иначе останавливаемся. Фактически в задаче от нас требуют выпуклую оболочку — и этот алгоритм проще понять, представив его, как построение выпуклой оболочки.

    Понятно, что каждая новая вершина добавит в выпуклую оболочку не более одного ребра, и каждое ребро мы из оболочки выбросим не более одного раза, поэтому сложность такого построения графа — O(N).

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

I got TLE in Div1 A on pretest 7. I had used cin cout with ios::sync_with_stdio(false). Until now I used to think that this method is faster than scanf printf. But when I changed this to scanf printf , the code was accepted. What is the reason for this?

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

    cin/cout does usually works longer than printf/scanf...

    use read/write instead!

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

    Each operation on cin flushes cout by default. Use cin.tie(NULL); to prevent this.

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

      Are #define endl '\n' and ios :: sync_with_stdio(false) enough?

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

        Together with cin.tie(NULL); this is probably about all you can do to speed up iostreams.

        Also with std::strings it helps to .reserve() the maximum number of characters before inputting a string, and to reuse the same string object if possible:

        string s; s.reserve(100005);
        
        for (int i = 0; i < n; i++)
        {
            cin >> s;
        
            // do something
        }
        
        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Not just with strings. If you have a vector<> which you construct by adding elements (my implementation of interval trees, for instance), .reserve() can cut down on time and memory nicely.

          Note a line in my template: #define dibs reserve :D

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

Прошу администрацию обратить внимание на взломы (их не много), там есть пара очень подозрительных...

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

    Чем же подозрительных?

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

      Да, знаем. :)

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

      есть решение с заведомо неверным ответом на тест 1 20(которое взломали), аккаунт зареган 11 часов назад

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

Very nice problem :) it's really surprising !

-.- but I late to realize that

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

А можно еще попросить, объяснить, почему мое решение на А упало? не понимаю :(

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

Thanks to authors for illustrations! Very helpful!

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

Great Round ! too bad my C couldn't make it through the system tests :D, I realized after that it had a very simpler solution than i thought

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

Как раскрыть скобки в задаче С? а то у меня не получается получить формулу.

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

    Там нет формулы. Просто если увидеть, что каждое произведение по сути встречается дважды

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

    В итоге получается сумма произведений диагональных элементов, что в свою очередь является просто суммой диагональных элементов. Произведения всех остальных пар производятся дважды и дают в результате либо 0, либо (2 * 1) % 2 = 0, стало быть, их можно не учитывать вовсе.

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

    Очевидно [прямо из условия следует], что ответом на задачу будет

    (tr(A^2)) mod 2
    

    По свойству следа матрицы получаем:

    tr(A^2) mod 2 = (tr(A)*tr(A)) mod 2 = tr(A) mod 2
    

    UPD: Пояснение здесь

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

      А что за свойство следа такое? Имеется в виду только по модулю 2?

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

    матрица a размера n*n

    скобки

    (a(1,1)*a(1,1)+a(1,2)*a(2,1)+...a(1,n)*a(n,1))+(a(1,2)*a(2,1)+a(2,2)*a(2,2)+...a(2,n)*a(n,2))+ ...

    (a(n,1)*a(1,n)+a(n,2)*a(2,n)+...a(n,n)*a(n,n))

    скобки по строкам — отбрасываем(они не влияют)

    получаем ситуацию, когда каждая пара произведений (кроме a(i,i)*a(i,i)) встречается по два раза их сумма всегда ноль(1+1=0б 0+0=0) остаются пары: a(1,1)*a(1,1)+a(2,2)*a(2,2)+...+a(n,n)*a(n,n)=a(1,1)+a(2,2)+a(3,3)

    Ну а каждое изменение матрицы меняет только одни диагональный элемент. всё

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

    По сути, нам нужно посчитать . Сразу можно видеть повторения. :)

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

      То, что претесты проходит решение, в котором if (n%2==1)res=1-res; (т.е., работающее только для нечетных n) — это хитрая задумка, чтобы было пространство для взломов, или же случайно так получилось?)

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

Illustrations were so helpful.

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

Хороший контест для неосиляторов сложных задач, вроде меня. Спасибо автору за этот раунд, и за контест в ПТЗ.

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

    Спасибо... :) Рад, что наш контест в ПТЗ понравился.

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

Зачем вообще такие неразумные ограничения в div2 C/div1 A ??? Вся фишка в том, что переключение с ввода на вывод работает слишком долго??? Но это же глупо ловить решения на таком проколе.... И еще я вообще не понял, почему, в общем-то правильные решения мои решения, отосланные во время контеста на Delhi, сыпались по RE на 3 тесте — там вообще пустая выдача, а они же, но на FPC, доходили до 7 теста, где получали TL. И все это устаканилось только после того, как выдачу сделал одну — в самом конце.

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

    Чтобы запретить оптимизированные решения за n2 + nq, в общем.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Вообще-то, все мои посылки работали ровно за n*n+const*q. Но меня окончательно добил тот факт, что посылка с контеста на Delhi, получившая RE на 3-м тесте, спокойно зашла в в дорешивании при закомменченом закрывании outputа. Всегда искренне полагал, что output надо закрывать, и на тебе - с закрыванием сыпется, а баз него все  ОК.
      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится

        Зачем тебе вообще закрывать output при вводе/выводе не из файла? Первый раз слышу

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

        не вижу вашего сабмита на ОК

        UPD. аа все, пардон

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

when will the ratings be updated?

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

удалил.

стало можна просматривать чужой код уже.

решение 6116164 меня устроило :)

P.S. очень красивое решение, кстати

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

Why the Codeforces Judge Doesnot Give Runtime Error in Situation When Size of array is Smaller than that Required... Rather It gives WRONG ANSWER. In some Judges like spoj WE get RUNTIME ERROR. Got WA on test7 PROBLEM C DIV 2 due to shorter array size,I concentrated on other Bugs rather than Array size which i missed ... so Discouraging

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

    global array overflow will not lead to runtime error(if only a little), but local one does. overflowed parts may not be initialized correctly.

    UPD overflowed 2-dimensional array will get wrong answer. See the implementation of 2d arrays: the i+1-th row is placed right after the i-th row. So if you write overflow data in i-th row the result is the data in i+1-th row is modified.

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

    When you do something wrong in C++, you don't get a runtime error. You get undefined behavior, and today you saw one of the many ways how it can behave.

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

When the editorial posted then?

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

please can any one tell me why the judgement verdict "SKIPPED" is shown ........??

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

    Maybe you have copied the solution or commented about the solution outside

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

Thx for contest, I am very happy for my participation, in final I got +163 ratig points) thx a lot

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

чем то эти две посылки очень похожи, или мне кажется? 6115340 6116302

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

Can someone please help me by pointing out why 6118389 solution fails but 6118249 passes ? (Only difference is the part commented out in the AC solution)

The code that has been commented out should have no effect on the final solution, since (X +- (2*Y))%2 is same as X%2 .

EDIT : Will not work in if 2*Y > X.

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

    I had a similar solution which failed on case 50. Weirdly, converting everything to long long got AC.

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

      Still WA. there shouldnt be a problem for long long in any case. The maximum value would be 1000*1000

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

Я один такой неудачник, кого разлогинивало каждые 5 минут?

Не скажу чтобы сильно мешало — всего раз 4-5 за час контеста логиниться пришлось — но любопытно, на чьей стороне такая фича :-o

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

If the result of the judging is Compilation Error, Denial of judgement (or similar) or if the solution didn't pass the first pretest, then this solution won't be considered in calculating results. I take this rule from here
Now I ask If this is the only solution I submit it wrong and get wrong answer in the first pretest so it won't be considered in calculating so it doesn't considered as a try so system has to deal with me as out of contest at this moment like the case of you didn't submit anything. Now,
why my rate change ?

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

    I think this rule only means that there are no penalties for a compilation error or failed on pretest 1 ...

    However, I think it is quite fair to get your rating changed, cause u actually tried to solve a problem during the contest ...

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

Как решается С?

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

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

    Собственно, явно дерево строить не нужно, можно за один ДФС все сделать.

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

    Я не знаю, как рассуждал Endagorion, поэтому опишу свою цепочку рассуждений (решение в итоге получается идентичное):

    1. Ориентируем ребра произвольным образом. Условимся, что объединять в цепочки мы можем только те ребра, которые входят в одну вершину.
    2. Некоторые вершины имеют нечетную входящую степень. Если мы проведем между двумя такими вершинами путь и развернем все ребра на нем, их входящая степень станет четной, а входящая степень всех остальных вершин на пути не изменится.
    3. Из предыдущего пункта очевидно, что путь нас устраивает абсолютно любой. Давайте же будем искать его на произвольном подвешенном остовном дереве.
    4. Заметим, что развернуть все ребра на пути между двумя вершинами — это то же самое, что и развернуть все ребра на пути до корня от каждой вершины.
    5. Соответственно, данное конкретное ребро будет развернуто тогда, когда в поддереве, куда оно ведет, нечетное количество вершин с нечетной входящей степенью.

    Итого, моя реализация — DFS для разворачивания ребер и восстановление ответа циклом.

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

А будет ли разбор?

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

Thanks for the round!

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

    Maybe it makes sense to integrate your statistics into codeforces instead of creating a blog?

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

first contest and become purple. happy~ >.<

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

Is there a quicker method for console input in java, other than BufferedReader or scanner?seems that using either of them cannot pass problem c in div2?

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

    Just now I translated my code into c++, and I used "scanf" for console input.It passed.

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

    I used BufferedReader in java (Scanner will not do with 1000000 lines) and it worked perfect.

    By the way I see no solution with BufferedReader among your 3 submissions.

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

      It is here. http://codeforces.com/contest/405/submission/6114625 Did I make some mistakes?

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

        No mistakes, but probably there really are some points to improve:

        • you really need not filling matrix at all — you need only to sum diagonal elements;
        • in matrix filling you also need not do "split" — this creates 1000 small strings 1000 times while you can simply check diagonal character with "charAt";
        • you was trying do output with System.out.print for each command — I fear this could be slow — try to collect the whole answer string in array or list and after the loop output it with a single "println".

        For 1000*1000 matrix your two pairs of nested loops will give 10^6 iterations each (and this is not necessary as I've told) so you probably spend significant time in vain and then there remained too few time for printing answer with "print".

        Check my solution (it is similar except details mentioned): 6111736 — it really takes less than 200ms... So I do not think you need to resort to C, though surely Java is slower :)

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

    Many Java coders use a self-written FastScanner class or something similar. For implementation details please look at any of my submissions.

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

      OK, thank you!

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

      i'm not expert, but i dont see what's the difference between ur FastScanner and java.io.BufferedReader.
      can u please explain the difference? thanks.

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

        Oh, it seems that you don't know Java at all...

        Please read about BufferedReader. Then please read about Scanner. Then please understand that FastScanner is a recreation of Scanner's most useful features for competitive programming that works fast (contrary to Scanner). Then you won't ask such stupid questions.

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

I'm waiting for editorial .

thank you

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

Никак разбора не дождусь

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

The tutorial will be tomorrow they said. Wait for it, they said. -_- :DDD

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

Thanks everybody for participating in this round! We would like to hear your thoughts: what did you like very much or not so much? What can we improve in our next round? (Apart from the late tutorial, sorry for that..)

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

    The Style and the format of problems were very interesting (especially prob. C and D in div. 2)! I liked the problem statements, they were very clear and easily understandable.

    Maybe the only thing that I didn't like so much, is that there was little opportunity of hacking someone's solution, maybe for some of us it's good, but I think that passing the pretests almost meant passing the System Testing.

    But, in general I hope seeing more this kind of rounds here at CF. It can serve as an ideal example for the upcoming contests. We are waiting for other, even more interesting and challenging problems!

    Thank you for the hard efforts ! :)

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

    I liked that the authors messed with my head in Div1 B/Div2 D by making an example where |X| did not equal |Y| (because one term was 0 and could be omitted), and then writing

    instead of

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

    Thanks for organizing the round. I tried to solve problems A-C in Div1. Problem C was excellent: a "natural" problem and a very clear problem statement. Problems A and B were also interesting, but they were somewhat difficult to understand due to the complex problem statements. In addition, it's not nice when cin and cout are too slow (and warning about this makes the problem statement even longer) — maybe it wouldn't have been necessary to use so large test cases.

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

      Cin and cout aren't too slow if you use the right tricks. (Okay, they are sometimes, but such problems are very rare.) It's not actually an author's obligation to warn about it, and in some problems it even seems unnecessary (200000 integers is hardly an extra large test case) — take it as gen's generousness of sorts :D

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

    I think div1 problems (A-D, I don't know how to solve E so far) are really awesome. Thank you for the contest.

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

      I found E simpler than C and D. Don't be afraid of it, it isn't hard at all.

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

        Yes, during the contest I try to solve E after a lot vain work on C and D. However it requires more patience which I am lack of. Finally I solve it in the practice.

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

Непонравились прыжки количества данных в претестах, например в задании "D" (Div.2) первые 9 претестов дают макс. 9 данных, а 10-ый претест дает — 500 000 (макс. количество). Из-за этого трудно определить — сколько времени нехвотает для решения.(мое решение паскалем ели справилось — 935 мс (6129758), но незнаю, сколько нехватает другими языками)

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

    По идее, для проверки того, укладывается ли в таймлимит Ваше решение, стоит пользоваться вкладкой "Запуск".

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

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

    С другой стороны: если, например, в претестах 5 и 6 соответственно ограничения 10000 и 100000, большой ли смысл ускорять решение, которое не работает для 10000 только до такой степени, чтобы оно свалилось на 100000? Скорее, лучше сразу получить информацию, что решение не проходит во время в худшем случае (то есть макстест).

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

      Согласен, но если разница по-меньше, например 120 мс (из 1 с) в тесте с 10к (когда макс — 100к), то можно предположить что на макс-тесте будет работать 1,2 с (если O(n)), тогда можно поковыряться в коде и иногда найти, где ускорить.

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

        Ну дело в том, что сейчас хорошим тоном считается класть мактест в претесты. Так что можно на это рассчитывать. К тому же, каким образом во время соревнования можно узнать, какие ограничения даны в тесте? Поэтому мне лучше нравится политика: «ТЛЕ на претестах, значит не проходит макстест».

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

239 ?