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

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

Привет, Codeforces!

14 февраля 2015 года в 19:30 MSK состоится раунд Codeforces #291 (Div. 2) для участников из второго дивизиона.

Это мой первый Codeforces раунд. Надеюсь, он вам понравится.

Большое спасибо Максиму Ахмедову (Zlobober), Василию Антонюку (Antoniuk) за помощь в подготовке задач, Марии Беловой (Delinur) за перевод условий на английский, Михаилу Мирзаянову (MikeMirzayanov) за платформы Codeforces и Polygon.

Удачи всем!

UPD: Распределение баллов по задачам будет таким — 500-1000-2000-2000-2500.

UPD: Разбор. Простите за задержку)

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

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

wish it will be the way to DIV 1 :-)

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

I hope your next round will be Div. 1 too :)

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

What a shame ! I have a flight on that time. I will miss that round. I hope not to be busy at next contest on codeforces . Contests make addicted :)

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

I want to be a Candidate Master...

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

    Not everyone gets what they want. For example I want to be a potato, but I can't... Probably the fact that my name isn't GLaDOS helps.

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

    Hey! I just chanced upon this comment, and I see you've become a Master now. Congratulations.

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

That's why I have no girlfriend...

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

hope i will be blue today ...

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

sorry if you see that I shoudn't write like this..

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

А условия задач будут доступны только на английском языке?

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

    Раунды всегда и на русском, и на английском есть, это только тренировки могут быть на одном языке. Плюс автор раунда — русский, так что, скорее всего, изначально условия были написаны на русском, а потом уже переведены на английский. Ну и плюс, в анонсе раунда есть благодарность Марии Беловой за перевод задач.

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

      Вы правы. P.S Автор не русский, но да ладно.

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

        Живёт и учится в России* в следствии чего, наверняка, знает русский получше других языков. А так да, извини, я обратил внимание только на университет, а не на место рождения.

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

Why no div 1 I wanna become master:P

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

Have Any Problem Of Valentine's Day?

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

Today is the birthday of the first electronic general-purpose computer.
Happy Birthday ENIAC.
ENIAC

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

very interesting problem set, many thanks for not setting a valentines theme.. star wars theme was a pleasant surprise

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

UPD: Finally, +17:-3, including: 1 triple hack, 4 double hacks, 1 last minute hack.

Well done!

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

Hopeful of being a room winner for the first time :)

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

Riiiiiiiiidam

tanx

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

I got WA at #6 on problem C. Anyone knows what it is about?

I solved it using a trie.

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

    I've had WA6 too, and that test helped me... input: 1 1 a a output: NO

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

I got WA at #6 on problem C. Anyone knows what it is about?

I solved the problem using a Trie.

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

Как решать С без хешей? А то один японец в моей комнате сломал поголовно всех, кроме сдавших ее на последних минутах.

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

    Я думал о каком нибудь Ахо-Корасике или Укконене, но придумать что с ними нормально сделать — не смог

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

    Я написал бор, не знаю упадет ли, но как мне кажется, вроде должен заходить.

    UPD: загоняем все строки исходные в бор, затем когда нужно получить ответ, нужно пройтись по бору dfs-ом, с параметрами (curNodeInTrie, curPositionInString, hadDif) как только нашли ответ сразу же вернем его.

    Погенерил тесты, вроде нормально, а вообще: сейчас систесты покажут =)

    UPD: бор зашел за 184 мс

    Code Here

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

      А можно поконкретней с бором?

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

        Я, например, решал так: записал весь вход в бор, потом для каждого примера шел по бору и записывал все существующие ответвления. Потом от каждого ответвления пытался найти окончание примера. В какой-то момент на контесте пришло понимание, почему это работает быстро(кажется, не медленнее, чем n*sqrt(n)), но сейчас опять забыл =(.

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

      Как именно в этой задаче можно использовать бор?

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

        У меня хорошое решение с бором + хэшами.

        В вершинке бора храним набор хэшей суффиксов тех строк, у которых есть данный префикс, потом перебираем совпадающий префикс (и, соответственно, двигаемся по бору), идём по всем рёбрам из текущей вершины кроме того, которое должно быть при добавлении строки запроса в бор, находим совпадающий хэш с хэшом суффикса строки запроса — YES, иначе продолжаем искать. Дошли до префикса длиной во всю строку — NO.

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

      написал тоже самое, забыл про условие, что различие в 1 букве нужно обязательно. :(

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

      Я тоже использовал бор, но не знаю: "пройдет ли финальные тетсы?". Вот код: 9848296.

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

      А почему это будет быстро работать?

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

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

        Чтобы была возможность ответвиться по букве на позиции х, нам нужно скормить бору строку, которая совпадает с запросом на префиксе длины х-1 и отличается в позиции х. Очевидно, что при заданном запросе одна строка словаря подходит не более чем для одного х.

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

        Таким образом получаем асимптотику L*sqrt(L), где L — размер инпута.

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

          Написал примерно то же самое, решил обновить страницу до публикации — и увидел, что опоздал =) Красныйбыстр...

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

    Так он всё-таки искал коллизии? Меня он вроде бы взломал, потому что бинпоиск был кривой.

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

      Он использовал тест отсюда

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

        Спасибо, не знал про эту фишку. Но ведь тогда можно было написать хэш по какому-нибудь другому модулю порядка 2^64, а такое вряд ли ломается даже атакой дней рождения.

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

          Перемножить два числа порядка 2^64 — не самый простой код. Поэтому обычно и берут порядка 10^9. Можно даже несколько модулей таких.

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

            10^9 плохо, потому что как раз ломается атакой дней рождения (т.е. за O(sqrt(n)*log(n)), насколько я понимаю). Если брать несколько модулей, то есть способ разделаться с каждым по отдельности, а затем скомбинировать, но строка, скорее всего, получится слишком длинной. А в чём проблема с 2^64, long long же просто? Брать по модулю 10^16+3 после каждого умножения (в качестве основания пойдёт что-то трёхзначное).

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

              Проблема использования 10^16 + 3 проявится, если мы захотим по хешам на префиксах считать хеш для подстроки (описание на e-maxx).

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

                А в чём проблема, собственно? Все те же рассуждения переносятся с 2^64 на любой другой модуль. Просто с точки зрения кода чуть сложнее, т.к. в некоторых местах придётся вставлять A%=P или A=(A%P+P)%P.

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

                  Умножение по модулю 2^64 — естественно и быстро. А умножение по модулю 10^16+3 — как-то не очень. В куске, который по ссылке оформлен как i1 < i2 && h1 * p_pow[i2-i1] == h2 || i1 > i2 && h1 == h2 * p_pow[i1-i2], нам нужно умножить два больших числа по модулю третьего большого числа, что дает переполнение. Приходится что-нибудь придумывать — например, делать Russian peasant multiplication (проще говоря, бинарное умножение), но это + к количеству кода и времени работы.

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

                  Как же вы посчитаете "h1 * p_pow[i2-i1]" (из статьи) по модулю 10^16 + 3, где h1 и p_pow[i2-i1] — это числа от 0 до 10^16 + 2?

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

                  Ну тогда согласен, просто с этим не сталкивался и не заметил, что там нужно умножать на степень основания. В таком случае считать хэши по двум взаимно простым модулям порядка 10^9 по отдельности видится мне самым надёжным выходом.

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

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

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

                Тут элементов длинки не больше, чем в задачах с условием "Выведите ответ по модулю 10^9+7."

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

                  Так же мало кода, как и в:

                  int mult(int a, int b, int mod) {
                  return (a*1LL*b) % mod; }
                  

                  ?

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

How to solve A.Or what is test 8 for problem A.

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

    I failed this pretest in my first submission, i guess it's something like:

    9999999999
    

    And answer is:

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

    number shouldn't have leading 0 so check if 1st character is 9 or not if it is nine do nothing if not change to 9-s[0] or not accordingly if it is greater than 4 or not . rest all was just checking if character if greater than 4 change to 9 -character less let it be

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

      So what is anser for 9999.is it 9 or 9000 or what

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

      I don't know... but by 'with no leading zeros' I understood that you can't write 0003 (for example). I think that the statement should say something like 'with the same nuber of digits'.

      What do you think?

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

        The problem should have mentioned "with the same number of digits"! :(

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

        Yes , actually this is very poor statement in the question.I am very disappointed like this type of problem statement [user:Zlobober][user:antoniuk].I am also wonder how some top guys think about this in the only first chance.

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

    Some number where first digit is 9, i guess. Like 9631 with answer 9331.

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

What was the hack test on C?

Overflowing the length in a char array? (up to 6*10^5)

Just time outs?

WA with the same string as in dict?

I submitted a brute force that passed the large pretest (took some work) just to hack on C XD, thinking it was overflowing the char array, but everyone used cin >> string so nothing for me

Somehow no one hacked my solution (maybe not enough time)

EDIT: WHAT, my brute-force C passed systests...

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

    ML/TL for generating all possible strings and putting them into map.

    WA for using hashes modulo 2^64.

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

      Not necessary 2^64. I have hacked a few solutions that use one hash modulo 10^9 + something. It is also possible to find a collision for two hashes, too(but this generator is slightly harder to implement).

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

    I don't think people are so brash, but maybe this is the case

    UPD. Turns out that post had only Russian version. That post is about hash collision generator, code: http://pastebin.com/JfTEUwCe

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

    The one I hacked is looping with strlen(s), which is, of course, linear time.

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

    pretests are a bit weak, i think. I got pretests passed in my first approach where space complexity was O(n^2) [Unnecessary though]

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

    O(Nsqrt(N)) didn't pass. T^T

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

Is in the problem E answer is polynomial of degree ~100?

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

Весь контест пытался понять. Что здесь не так? Просветите, пожалуйста. 9844828

P.S. Если нет доступа, задача C, WA6: http://paste.ubuntu.com/10225587/

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

How to solve B ?

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

Is solution of 514E - Darth Vader and Tree related to matrix multiplication?

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

How to solve B ?

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

    Count the number of groups of vectors (positioned to x0, y0) so that for each pair of vectors in the group, their dot product is zero, and no vectors in different groups give zero as their dot product.

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

    I did a brute force . take the position of gun let it be a,b . then for i=1..n .maintain a array called as killed[i] denoting if you killed ith enemy or not. start a loop from 1 to n check if killed continue. otherwise break .let this position be m. find coefficient of line passing through a,b and this point then for elements m+1..n check if it comes under the line .if it does mark killed[] =1 ; check if all are killed if it did break and print the count

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

    I construct a, b, c in equation ax+by+c = 0 for (x0,y0) with (xi,yi) , i = 1..n. And you should make gcd(a,b,c) = 1 and a > 0. After that, you can sort n equation (a,b,c). Remove (a_i,b_i,c_i) == (a_j,b_j,c_j) by unique in C++. So that you have the result in O(NlogN)

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

    you get all N points and you insert tan((y-y0)/(x-x0))in an array tan and the answer is the number of different numbers of array tan .

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

    well, let's count the number of the different slope k = (y — y0)/(x — x0). I think so!

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

      I did that but I lost 100 point due epsilon precision. What is the default precision we need to use to compare two doubles?

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

        Consider two doubles a and b equal if fabs(a-b)<=EPS, where EPS is something like 10^(-9).

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

          Then, the number should be 10^(-9). I used 10^(-4) and 10^(-6), getting WA in both. AC after 10^(-9) with the same solution.

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

            Correct answer is 2. With epsilon 10 - 6, the answer seems to be 1; the numbers are close enough. (If you're wondering, the differences 6765, 10946, 17711 are consecutive Fibonacci numbers, which is why .)

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

        in such cases when you are not sure of what value to assign to eps, you can use

        set<double> 
        

        and let the compiler do the rest.

        I did the same, and it worked like charm. 9834951

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

        I tried storing numerator and denominator seperately as int after taking gcd, and it worked. You can view the solution here

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

    Find the slope of each point with respect to gun. Store them in set. Print the size of the set.
    If denominator while calculating slope is zero, assign it some infinite value. I hope it helps.

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

      Umm did you store the slopes in a double? There could be precision errors then.. not sure though. I prevented myself from doing it this way due to the possibility of this error.

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

        Yeah stored them as long double. I hope there are no precision errors.
        Edit: It passed.

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

        I stored each slope in a set of doubles and my solution passed tests. Guess I got lucky.

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

          An alternative would be to write a fraction class as such:

          class Fraction {
          	public int a;
          	public int b;
          	public Fraction(int a, int b) {
          		this.a = a;
          		this.b = b;
          	}
          	@Override
          	public boolean equals(Object ff) {
          		Fraction f = (Fraction)ff;
          		return (this.a*f.b == this.b*f.a);
          	}
          }
          
  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    I calculated the slope of the line (y-tY)/(x-tX) and stored it in a map. In the end I just print the size of the map. Can anyone help me with the complexity of this?

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

      I guess in the worst case it would be

      O(N*logN)
      

      as you have to insert N different slopes in worst case, and each insertion would take at most logN time.

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

    I counted the number of differents tans, but I got WA on test 8. Anyway, what is the test 8?

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

      ( area == 0 ) this is my solution which WA on test 8 ( area < 0.00001 ) this AC

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

    you choose x1 y1 one point and erase it and ans++ then erase which point on line x,y to x1,y1
    if which points on line erase it

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

    I sorted the points by their slope with (x0,y0) and then compared p[i] and p[i-1] using (p[i].y-y0)*(p[i-1].x-x0) == (p[i-1].y-y0)*(p[i].x-x0). If False, increment the number of shots.

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

    I also counted number of unique slopes with a c++ stl set (9839367). It got WA. But surprisingly, replacing scanf with cin got AC !!!

    Can somebody explain what's here:

    WA: http://paste.ubuntu.com/10226578/

    AC: http://paste.ubuntu.com/10226581/

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

      Guys, it`s magic I just move declaration of set at WA code to main scope and got right answer

      Code

      Full 8 test

      WTF?

      Seems like that this magic feature forks only under MinGw G++ 4.8 and 4.9 (at Ms works fine) In my Linux machine with g++ 4.9 with same compile keys it works fine.

      Can someone make disasembly of this code(dont have win machine with Mingw right now) or explain ?

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

        Yes, seems magical. Did spent quite some time yesterday. Didn't disassemble as could not produce on local. I did played around quite some using the "custom invocation" of the code forces and have noticed the following(not sure how relevant they are).

        1. The problem seems to be, the set is counting some "similar" doubles as different. the results produce using scanf is always higher than what it should result from cin(which we think is right)
        2. If I change to float the behaviour is same for cin and scanf.
        3. If I use iterator and simply iterate over the slopes set before the calling cout<<slopes.size() and getting the right results.
        4. Personally feeling may be scanf is setting constant or variable which is affecting the double comparison on the set.

        Whatever be the case, please update if anybody find the reason for anomaly.

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

Actually Hon solo in problem B was fun.Have you seen "that's my boy movie" :D i don't think you remember Hon solo if you have seen it.

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

Кажется, некорректное условие в задаче А: В условии не сказано о том, что длина числа должна быть неизменной, поэтому, по логике: 900 должно переходить в 009 = 9 (инвертируем первый, а так же последний, чтоб получился положительное) 999 должно так же переходить в 009 = 9 (инвертируем первые два, а последний не инвертируем чтоб получился положительное) Но, поговорив с другом после контеста, оказывается, что его код прошёл, т.к. он делал для случая, когда длина чисел остаётся неизменным. PS: ы, давно не заходил)

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

    Так ответ не должен начинаться с 0.Поэтому из 900 никак нельзя получить 009.

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

    Там ясно указано, что "Число не должно содержать ведущих нулей."

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

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

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

      Ну тк, не должно содержать в конечном итоге. Мы получаем 009, потом удаляем 00, и вуаля, ответ удовлетворяет условию.

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

    Еще хз, прошел или нет, кстати

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

    В условии сказано, что число не должно начинаться с нуля.

    // не видел ответы выше

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

    "Запись итогового числа не должна начинаться с нуля.", то есть запись числа после применения некоторого количества операций инверсии цифры не должна начинаться с 0, так что 999 не может перейти в 009. Запутаться можно, но условие корректно.

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

      нет, не корректно. "Запись итогового числа" — это именно число в целом, а не первая цифра. Т.е. читать "привести число к обычному виду". На то, что это относится к формату вывода, а не вычислениям, указывает и повторение этого условия в разделе "Выходные данные" — "Число не должно содержать ведущих нулей." (в ином случае это условие было бы лишним)

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

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

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

please help me problem C

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

    For each query string s with length L, there are 2L possible variants (i.e. replace each character by the other 2, and since you can do this only once, there are 2L such possibilities). You need an efficient data structure to check whether the variants are in one of N strings. I think using trie is sufficient enough.

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

    I use set in C++ to save n string in set S. After that, with string i in m string query, consider position j, we have string x = s and set x[j] = {'a','b','c' \ x[j] != s[j]}. You can find x in set S in O(log(N)). I think it ok because The total length of lines in the input doesn't exceed 6·10^5

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

      well, i solve it with map (as set) and i couldn't submit it in 2 seconds :(((((

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

      "You can find x in set S in O(log(N)) " Not true. Comparing two strings needs O(length(x)) if they have a very long common prefix, so it's O(length(x)log(N)). Consider this case: 1 1 aaa...aa aaa...ab (The first consists of 300000 'a' and the second consists of 299999 'a' and one 'b')

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

    you make a robin-karp(hashing) all strings of the dictionary but with a different letter at each step ( if str[i]=='a' you get 'b' and 'c') and you insert this value in a hash at each step... and for queries you make a classic robin-karp at string Q and check if this value is in hash... You should double hashing for safety(two different bases and two different MOD)

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

    I'm not sure if it's correct solution, but you can try to do it with hashing. For each n strings, calculate their hashes without each single letter. Next, do the same with strings from query but this time if any hash of ith string existed before, then answer is "YES" otherwise answer is "NO". There might be some problems, when some strings are equal, but it's not that hard to deal with.

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

    let's define that: a is number of character 'a' b is number of character 'b' c is number of character 'c' we need to find out at least one element in this set: { [a — 1][b + 1][c], [a — 1][b][c + 1], [a][b — 1][c + 1], [a + 1][b — 1][c], [a + 1][b][c — 1], [a][b + 1][c — 1] } and compare them with string t to satisfied the condition! we should use map(or set) to save the input string with [a][b][c]. I think it could process in 3 seconds :D !

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

      I think that is wrong, check this test case: 1 1 caaa aaab

      the answer is NO

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

4 unrated handle spotted the top 5 in current standing! They're unpredictably good o.O

UPD: In final standing the number decreased become two and both of them are the top 2! Fast system testing by the way.

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

To solve problem C, Is "c++ STL set" just enough?

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

    I think it's not, I have used hashing to solve it. BTW, during the contest I wanted to hack a solution with set, but when I tried to send the test it was loading for a while and then nothing — I had to try again and then happened the same. If it turns out that set isn't enough I will be kinda sad :D

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

    Unfortunately for me,set is not enough. I passed pretests,but in test 20 I got Time Limit.

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

А что там в D? Я хотел написать бинарный поиск по длине отрезка использующий дерево отрезков чтобы подсчитать макс на отрезке.

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

    Да, я так и делала.

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

    Если написать это неаккуратно, то есть риск поймать TL.

    Чтобы улучшить асимптотику, можно вместо бинпоиска по ответу использовать два указатели.

    P.S. А дерево отрезков можно заменить на мультисет.

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

      Скорее всего, вместо дерева отрезков нужно использовать Sparse Table.

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

      А можно и за O(NM), если мультисет заменить на очередь с максимумом.

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

      А как мультисетом считать максимум на отрезке?

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

        Если мы используем два указателя или бинпоиск+sliding window, то у нас при переходе от одного запроса к другому удаляется что-то с префикса запроса и добавляются какие-то новые элементы на суффиксе. Если это окно, то удаляется крайний слева и добавляется первый справа, если два указателя — в зависимости от того, какой указатель и на сколько мы двигаем.

        Будем хранить все элементы отрезка в мультисете — тогда для ответа на запрос достаточно взять последний элемент мультисета. Это логарифм. Каждый элемент будет добавлен в сет 1 раз за проход и удален тоже 1 раз за проход — это тоже логарифм.

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

    А можно за , если делать вместо бинпоиска спуск по дереву, или, еще проще, использовать sparse-table, и идти по убыванию степеней двоек.

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

    Я решил за O(n * log n * log n), RMQ + перебор начала отрезка + бин поиск конца.

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

I've used unordered_map in problem C, but I've got hacked. What could be the problem?

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

    The time complexity of your code is O(n^2) in the worst case. I used a test with two arbitrary strings of length 3*10^5 to hack your solution.

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

      I got TLE in test 28 :( .. my time complexity is O(m * l * log(n)) where, l is length of string in each query. m,n are from problem statement. Can anyone explain how this doesn't run in the time limits? Upd: (m*l)<=6*10^5 (from statement) and log n cannot exceed 18

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

        The time complexity of your solution is not O(m * l * log(n)). Just consider the input that consists of two string: each of them is a letter 'a' repeated 3 * 10^5 times. Your solution makes O(n^2) comparisons for this test.

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

i am submitting div2 3rd ..but its not showing me the case i m wrong on...!!!!

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

I am very sad about problem D. This is my code in contest and this is my code after contest. They different exactly one positionL = 0 and L = 1. If I have 10s to think that, then I can accept problem D and my standing not low.

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

So sad I didn't get rank 10, just because I missed the word "sequence" QAQ.

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

Finally, top 10 for me!!! :D

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

I've used Hashing to solve C. Here's my code 9849480.
It failed on the test #27. It's "..." testcase.
What's wrong with my code?

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

Problem A , in my opinion has a very ambiguous problem statement what is the answer to:- 90 90 or 9?

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

    1<=X<=10^18

    The number shouldn't contain leading zeroes.

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

      My point is, they should have explicitly mentioned whether the number should not have leading zeroes before printing the answer, or during computation.

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

    Read the problem statement. You should not have a zero at starting index after performing inversions. 9 is not allowed as it is actually "09", which has trailing zeroes

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

    I asked author what could be the answer for 9 as it was ambiguous and he said "No comments" -_-'

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

I get MLE on problem C. I solved it using a Trie. Can anyone have a look on my submission, please?

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

ML in problem C! :(

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

I got MLE on problem C at #19. I solved the problem using a Trie. Can anyone have a look on my submission, please?

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

    I am stuck at MLE, too. this solution seems to use Trie but does not cause MLE... I don't know why, though...

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

    In your query function, you are passing the whole string and doing recursion. So each time you call query, the whole string will be copied and this increases the memory as well as the time. So I think if you just pass the string by reference string& s instead of string s it might resolve the MLE problem.

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

Can someone explain the algorithm behind this code: http://codeforces.net/contest/514/submission/9850107

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

    It's a technique which can be used to find max(a[i..j]) when we have queries of increasing i and js. However the code given by you is not that efficient. Take a look at this submission: We can use a C++ 'deque<int>' to answer all the queries in a total of O(n) time.

    It's lengthy to explain why the algorithm works (after all it's not too complicated), but the whole operation is expressed as follow:

    • Everytime we increase j (a.k.a push a[j] into processing) we remove deque.back() while it's smaller than a[j], then deque.push_back(a[j]).

    • Everytime we increase i (a.k.a pop a[i] from processing) we remove deque.front() from the deque if deque.front() is a[i].

    • The answer for each i..j query is always deque.front().

    • In order to limit the sum, each time we increase j (process the next element), we increase i until {sum} ≤ k

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

      Thanks much for the algo, it's really simple. In step of increasing j you forgot to push_back(a[j]).

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

In my opinion Problem A description was not clear.For input 90 output should be 9 according to problem statement but test data says answer is 90."Length of output number must be equal to length of input number" this single line of statement should have been added.

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

Any deterministic solution for C?

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

For problem C,why people get TLE in test #19?

Suppose,this solution

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

Why is rating update taking so long?

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

in Problem C O(m*l*ln(n)) with hashes and default c++ set gets TL on #20.

*solution 9841888

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

То чувство, когда перемудрил. 514A - Чубакка и число . Мой код — 9838729

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

I can't find my mistake about C problem, I used hash with unsigned long long

this is my soution: 9844038

Is there any problem if I substract from unsigned long long?

This is another similar solution, he used two hash, but I'm sure colisions is not my mistake ...somebody?

9836207

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

Sorry. Got the mistake.

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

I am sad I took TLE in C using set-stl,but I am happy because I achieved my first goal that was blue. Now it is div1. I hope to achieve that soon :D. I say that,because I want gray-green users that with "correct" practise everyone is able to achieve everything,and never give up.

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

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

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

Guys is there anyone who could help me understand why my submission gives wrong answer in test case #6? By my calculation the output kills 3 droids even though checker comment states my solution kills only 2 of them. Any help is greatly appreciated.

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

    "How many shots from the weapon of what type should R2-D2 make to destroy the sequence of consecutive droids of maximum length?"

    You have been destroyed 1, 3 and 4th droid, so your sequence has length 2. In the correct answer, 2, 3 and 4th droid is destroyed, so the sequence has — better — length 3.

    Word 'consecutive' is the key.

    P. S. Sorry for my english :)

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

Why do I get MLE for problem D? http://codeforces.net/contest/514/submission/9850749

I have used segment tree so 4*N*5 memory, plus one more array of N*5 (both int). As N is just 100000, this should not exceed 256MB memory limit.

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

    I also did segment tree and passed. Maybe you can take a look. 9865631

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

      Yeah, I got it later. I am creating 2 new arrays p,q in every call to query. This must be adding up to the memory as the arrays must get stored in the recursion stack. (Not sure, but I think this may have been the cause). When I removed that part, and instead passed an array to the query function, I got my solution to pass. http://codeforces.net/contest/514/submission/9858833.

      Anyways, thanks for your reply! :)

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

My 2 cents, since everyone writing about problem C seems to have tried hashing:

The similarity condition imposed is Hamming distance = 1. This is a metric space and can be solved with any of the metric tree structures. I used a BK-tree, and I got AC.

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

sdfdsfsdfsd no one can reach real coders (Even cheaters!)

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

    How he managed to get the solutions before starting of the contest ??

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

      See that '00:28' near his handle? It means he's a virtual contestant (submitted the solutions after the contest finished).

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

      That's virtual contest. I think he first took 5 submissins which passed all tests, started virtual contest and submitted them on the first minute.

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

When editorial is going to come? It will be interesting to see author's solutions to these problems :)

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

Still waiting for jury to start upsolving... :/

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

How could always the new comers be in the top list in division 2 ?!!!

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

Is O(M*N*log^2(N)) using segment tree supposed to TLE for problem D ?

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

Rebryk, I think data set of problem C ( 514C - Watto and Mechanism ) of today's contest was a little bit weak. Consider this submission: 9852063 which fails the test case:

1 1
abc
aa

Should not the output be NO? It gives YES instead.

Thanks. :)

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

became expert for the first time

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

i am getting memory limit exceeded on test 18 in C... i have used map<string,int> to do it.. can anyone suggest the reason for this? and also what would be a more memory efficient way of doing this question...

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

    When you use if (f[s]) with a new string s, it makes f[s] = 0 and therefore uses |s| additional bytes of memory.

    Try to use set <string> f and if (f.find(s) != f.end()) instead of map <string, bool> f and if (f[s]).

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

Can somebody please check why I got a run time error on test_25 http://codeforces.net/contest/514/submission/9848840

I have tried the test case on my computer and it worked.

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

this contest really interesting though i didn't solve any problem. actually i wonder why i can't solve at least problem A, and then i know that because some case (case 8) like this:

input :91730629

my output : 1230320

answer : 91230320

in my opinion, i think my answer actually didn't wrong because we could make the minimum positive number by inverting 1st, 3rd, 6th, and 8th character from the input and discard the leading zero. is somebody has the same opinion with me?

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

    the length of the output should be the same as inputs ! :)

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

      really? then i should miss that in the description :)

      btw, which statement says that?

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

        It is exactly because the statement never said that you can discard any digit. Which means you can only invert digits but then the result cannot contain leading zero(s).

        You should not make your own assumptions.

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

    Problem description says: "transform the initial number x to the minimum possible positive number by inverting some (possibly, zero) digits". so you can't discard leading zeros,only operation you are allowed to do is invert some (or zero) digits.

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

I used TRIE in Problem C but perhaps it should be String Hash? Anyway I FST beautifully.

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

I used TRIE in Problem C but perhaps it should be String Hash? Anyway I FST beautifully.

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

Where is editorial???

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

I got AC on 514B - Han Solo and Lazer Gun,but I alos have a question. gun is situated at the point (x0, y0). can stormtrooper at (x0,y0),too ? if so, i think some code maybe got WA。

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

    It is guaranteed that no stormtrooper stands at the same point with the gun.

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

I am trying to solve C problem. I see a lot of solutions where there is something like this :

for (int i = 0; i < n; i++) { ... for (int j = 0; j < s.length; j++) {

where n <= 3*10^5 and s.length <= 6*10^5 , so in worst case it works in 9*10^10 ~ 10^11 . Why it pass ? How can I calculate the worst complexity withing given time limit ?

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

    if n = 3 * 10^5 s.length can't be 6*10^5, because 6*10^5 in the worst is a sum of all s.length

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

      Yes, thank you. I misunderstood problem statement. Anyway, is there any good algorithm to determine the worst complexity withing given time limit ?

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

        What does it mean: withing given time limit?
        Time limit in this problem is 3sec.

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

          I want to know algorithm with 2 inputs complexity, time limit . The output will be answer YES/NO For example:

          C = 10^6 T = 1 s => YES

          C = 10^19 T = 1 s => NO etc

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

    Total length of all strings in input is 6*10^5, thus, the code you described does 6*10^5 iterations.

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

    Your solution couldn't even read input if these two loops would TL

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

The problem A has too many traps, and some of them is so boring, such as the fist digit can't be zero. I think it is meaningless......

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

Why does this give TLE for problem C? => http://codeforces.net/contest/514/submission/9853243

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

In problem C, I did not understand why the hash value of a string will not overflow long long. And if I mod using a 4 digit prime then there should be collisions.

Given the clue, "The total length of lines in the input doesn't exceed 6*10^5. Each line consists only of letters 'a', 'b', 'c'.", there can be a string of length 10^5 whose hash value can be huge.

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

Hi, somebody else used hash for the problem C?

I have WA #6 but I don't know why. Any help would be appreciated! :)

http://codeforces.net/contest/514/submission/9860261

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

For hashing, if I use 101 then I get WA for test case 8 but if I use 257 then it is accepted. Why so?

I chose 101 because the ascii value of c 99, hence I thought 101 was enough.

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

If you see a passed solution you think is wrong, is there a way to hack it in the practice room?

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

Codeforces Round #291 (Div. 2) champion ppfdd got AC on problem C.

But there is massive hack for his code.

While hashing, He converted a,b,c to 0,1,2.

So the result for this input:

1 1
abc
babc

the output generates

YES

which definitely WRONG ANSWER.

There should have been at least one test case regarding this factor. :3