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

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

Всем привет! Приближается Codeforces Round #268! Мы приглашаем вас поучаствовать в этом раунде. Он начнется в 17:00 по московскому времени 20-го сентября.

Задачи раунда были подготовлены мной. Спасибо xyz111 и dhh1995 за идеи некоторых задач. Также благодарю vfleaking,foreseeable, MinakoKojima, Ruchiose и xllend3 за тестирование.

Традиционно говорю спасибо Gerald за помощь с раундом, Delinur за перевод условий и, конечно, MikeMirzayanov за Codeforces и Polygon.

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

В задачах раунда вы будете помогать герою, чье имя Little X. Удачи вам и удовольствия от решения задач! :)

UPD

Раунд закончился. Спасибо за участие.

Мои поздравления победителям.

Div. 1

  1. PavelKunyavskiy
  2. Kostroma
  3. HellKitsune
  4. SirShokoladina
  5. DemiGuo

Div. 2

  1. manman
  2. topcodecheforces
  3. mhy12345
  4. GS_ZJ_137
  5. z.last

Поздравляю ecnerwala, единственного решившего задачу D!

К сожалению, никто не решил задачу E в обоих дивизионах.

Разбор задач будет опубликован завтра.

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

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

Looking at the level of the setters, I would say a Div 1 round would have been possible :( Edit: I thought today's round was their round, don't mind :P

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

another china round! good luck everyone :)

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

Why "Little X", but not simply "x"? :)

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

It's the first time to see contest announcement before the start of previous contest :D

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

Why are there so many numbers in the handles of the problem setters ? =D

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

Yessssss

Chinese round -> more math

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

    There is actually going HackerRank contest "Ad Infinitum — Math Programming Contest September'14 ". It lasts 2 days :). Give it a try.

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

    First of all, before this commented is downvoted, I would like to point out that codeforces is for developing your algorithmic knowledge. Depending on your definition of "algorithmic", math could be considered an algorithm; and this is a perfectly valid opinion. However, what is the point of competing in coding contests if all you want is math all the time. Every time you post, it's about math; nothing else. Coding contests are meant to introduce you to varied ways of thinking, not limited to math.

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

      I'm agree with you and I don't know why many people downvoted you. Someone like math, someone not. But everyone love coding. I think we shouldn't care about kinds of problems.

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

Oh, god, I think I can't participate any more Chinese round, because it is 6:00 am here.

Btw, I guess more testers you have then more difficult this round will be.. let's see if it is correct.

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

nice

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

Опять несколько часов до раунда, а перевода нет...

И опять я ругаюсь на это... в прошлый раз, когда я так ругался, в переводе был Яблов, а в этот раз, чувствую, будет "мальчик с именем Маленький Ху...".

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

So, its going to be a typical chinese round . good luck everyone :)

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

My last contest in summer! I'm going to school on Tuesday! Hope a good contest! Good Luck!

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

I have registered for the contest, but due to time constraints (I have to participate in a qualifying round of some other contest), I will not be able to participate for the entire 2 hours. Can I appear as a virtual participant (If I participate for the first hour of the contest)?

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

    No, if you submit during contest, it will be counted in your actual participation and rating changes will also apply. So it is better to take the entire contest as a virtual contest at some suitable later time.

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

I will try to help Little X as much as possible but can Little X tell us score distribution ?

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

Attention please,it's a Chinese round!There is reason to believe that it's impossible for the konjacs(its Chinese name ‘juruo’ means the people with low level like me)to improve rating.Good luck to every super cattle(you may be able to understand it)! TAT

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

Many GranMaster & Master for prepare this round. My premonition told to me that "be careful with tricky test"

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

Ehm, score distribution?

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

It seems that I will participate in the next contest (Div2) Officially :D

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

500 — 1000 — 2000 — 3000 — 3000 :(

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

B(div1) 4 7 9 2 4 5 7 If someone need.

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

По окончанию раунда собирался написать вот это сообщение, но понял, что тут написан бред =)

"Держу пари, что в C div1 ответ всегда имеет вид 1 R, где R ищется бинарным поиском. Динамикой можно преподсчитать сумму от 1 до N, где N — число вида С0000...000, где С — некая цифра от 1 до 9. Считается динамика, как я понял, за 200 (макс. длина) на 9. Единственное, пришлось бы немного помучиться еще и с длинной арифметикой (хотя поделить длинное число на 2 вроде бы не сложно). Так как 10^200 ~ 2^600, то асимпотика выходит O(600 * 200 * (махинации с длинными числами) + 200 * 9).

Если идея не верна — напишите как надо было решать, только понятными словами =)

P.S. За полчаса до конца раунда я бы такое реализовать не успел."

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

    Бинарным поиском простите по чему? Остаток по модулю не монотонен.

    Я делал так. Во первых научимся быстро считать сумму. Это делается за длину числа какими-то не очень сложными формулами. Если мы найдем два числа, дающих одинаковый остаток, то мы победили. Будем смотреть только на числа с остатком не больше 1000. Тогда если мы посмотрели на 1000 таких чисел мы победили. Теперь просто смотрим на все числа по очереди, и если остаток стал слишком большим, то бинпоиском находим место в котором он следующий раз переполнится через A. Так как сумма цифр одного числа небольшая, то понятно, что переполнится не сильно, и хотя бы одно новое число мы найдем.

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

      Бинарным поиском простите по чему? Остаток по модулю не монотонен.

      Вот поэтому я и понял, что это бред =)

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

      У меня бинпоиск. f(i) весьма случайные и небольшие. Можно перебрать левую границу, для нее найти правую, что сумма на отрезке >= a, и проверить отрезок.

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

      Вроде все намного проще:
      Обозначим за x сумму f(i) от 0 до 1018 - 1
      Надо рассмотреть два случая:
      1) Если x ≡ 0(mod a) — выводим [1, 1018 - 1]
      2) Иначе это [rev, rev + 1018 - 1], где rev = a - x%a.

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

        Классная идея. С учетом этого задача намного интереснее, чем показалось на первый взгляд :)

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

    На самом деле идея с бинарным поиском почти верная, только ответ будет не 1 R, а b R, где b — какое-то маленькое число. При этом забиваем на условие solve % a = 0 и просто ищем такие b R, что solve(b, R) = a. Очень легко реализовать. Решение

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

what was the hacking case in div-1 B...my solution got hacked :(

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

Как решать В(div.1)?

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

    Для каждого числа необходимо найти его отражение в множестве А и множестве B (то есть сумма числа и его отражения равна a или b). Делается это за линию для каждого множества. Далее убираем все числа (и их отражение), которые имеют только одно отражение в каком-либо множестве (логично же, что в финальном ответе это число может находиться только там). Когда все такие числа убраны, возможно два варианта: у какого-то числа не осталось свободного отражения (ответ NO), либо у всех чисел есть по два отражения в каждом множестве. В этом случае можно засунуть все эти числа в любое множество и быть счастливым. Важно понять, что число может быть отражением самого себя (претест 6) (например, в множестве А с a = 4, может находиться один единственный элемент 2).

    UPD: Решение верное, но после того как один раз будут убраны возможные числа, могут образоваться новые числа только с одним отражением. Поэтому необходимо провернуть операцию с удалением как максимум 10^5 / 2 раз, а это не проходит по времени. Другой вариант решения: это удалять числа рекурсивно. То есть, например, есть у нас 4 числа: a1, a2, a3, a4 (a1 + a2 = a, a2 + a3 = b, a3 + a4 = a). Можно заметить, что числа a2 и a3 имеют отражения в обоих множествах, в то время как a1 и a4 только одно отражение. Как только мы натыкаемся, например, на число a1, мы сразу можем засунуть его и a2 в первое множество, а раз у a2 было второе отражение, то у этого второго отражения уже станет на одно отражение меньше. То есть число a3, после того, как убрали число a2, тоже можно будет убрать (если, конечно, у него еще остались отражения (число a4), в противном случае ответ NO).

    P.S. Надеюсь понятно написал =)

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

    Как вариант, стандартным для всех задач подобного вида методом — с помощью 2-SAT.

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

How to solve C ??

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

    I took the following greedy approach:

    for n <= 8, run recursion
    else
    1 * 2 = 2
    3 * 4 = 12
    2 * 12 = 24
    5 - 6 = -1
    7 - 8 = -1
    -1 - -1 = 0
    for i > 8 && i <= n ( i * 0 = 0 )
    24 + 0 = 24
    
    
  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I used the following :

    for n<4 print NO
    for n=4/n=5 find solution by hand
    for n>=6
    n - (n-1) = 1
    1 - 1 = 0
    for all i = 5 to i = n-2
    i * 0 = 0
    
    you are left with {0,2,3,4} - just do 2*3*4+0
    
»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

How do we solve Div2 Problem C?

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

    There are several ways to solve it. You can see that with N < 4, there is no answer. With N = 4, you can easily take (1 + 2 + 3) * 4 = 24. N = 5, 2 * 4 = 8, 3 * 5 = 15, 8 + 15 + 1 = 24. From N = 6, 4 * 6 = 24, 3 — 5 = -2, -2 + 2 = 0, 0 * 1 = 0, then for i from 7 to N, 0 * i = 0, and finally, 24 + 0 = 24.

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

    I took special cases for 4,5,6 and

    and for n>=6

    used pre-created sequence for 5 and 6 based on even or odd n,

    made every element n and n-1 as (n)-(n-1)=1

    and multiplied all the ones in the end.

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

Can anyone share his/her approach in Div2 C problem ?

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

    If n is even and >= 4: 1 * 2 * 3 * 4 = 24 n-(n-1) = 1, (n-2) — (n-3) = 1 and so on. So just multiply the 24 with the ones.

    If n is odd and >= 4: 5 * 4 + 2 + 3 — 1 = 24 n-(n-1) = 1, (n-2)-(n-3) = 1 and so on. Same.

    There is no answer if n < 4.

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

    for n >= 6 erase all numbers except 2,3,4 using: (5 — 6 + 1) * z
    for n = 4 and n = 5 — hardcoded answer

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

      Yes got the idea now couldn't think about it in contest :(

      Thanks :)

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

How to solve Problem D of Div. 2 ?

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

    My solution was, to just use pair(value,pos) in a set, and modify the set comparing function to consider only the first value. Then just keep checking if each element has its match in either A or B. hope it passes final tests :)

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

    Your graph is inspirational !!!

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

    It's a bipartite matching problem ;)

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

    Hm, i had two maps, one <int,bool> where i stored if there exists some number, and one where do i keep position of that number in initial array. Then, for every number, check map1[a-array[i]], map1[b-array[i]], if there is both do sth, if there is only one put it into the set, if there is none return -1. See my code for details UPD: It failed on systest, so this approach may be wrong

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

    Pick a number in the list, say x. Then we are interested in whether a-x and b-x are also in the list. If

    1) Neither are in the list, then partitioning is not possible.

    2) If only a-x is in the list, then both x and a-x go into set A

    3) If only b-x is in the list, then both x and b-x go into set B

    4) If both are in the list, then this is inconclusive. We need to further check b-(a-x) and a-(b-x) according to the same rules (for example, if only b-(a-x) is in the list then all of a, a-x, b-x, and b-(a-x) go into set B).

    The implementation of this is pretty straightforward, though in contest I mishandled the a=b case (which requires special handling as a-x=b-x=b-(a-x)=a-(b-x)=...). See 7882478.

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

    hopcroft-karp bipartite matching

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

      Hii, palmerstone, I like your approach using Hopcroft karp, but I am having trouble understanding the case when both a-x and b-x (along with x) are present in given array. Here's a part of your code

      if (!c && !d){
            flag = false;
            break;
      }
      /*...*/
      if(!flag) puts("NO");
      

      how did u came to such conclusion that when both a-x and b-x are not present, there can't be any possible matching?

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

        What do you mean? x is an element of the given set. If both a-x and b-x are not present then it is certainly not possible to include x in any of the sets, is it? Hence not possible.

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

          Oh yes. Thanks, I get it now... By the way can you please tell what does array L and R store in your implementation of hopcroft-karp ??

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

    My solution for div2 D/div1 B:

    Assume that b>a because we can switch them anyway and b=a is trivial case. Let x be the smallest value which hasn't been assigned yet to either of the sets. If there exist a value b-x, then we have to pair values x and b-x into set B because value b-x can't be paired into set A because a<b and therefore a-(b-x)<x and there exist no values smaller than x. So we know that if there exist value b-x, we have to pair it with x. If there doesn't exist value b-x, we have to pair x with a-x into set A. If we can't do that, the answer is NO. This approach can be implemented just by iterating over elements which haven't been assigned to either set in ascending order. 7874034

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

What's the solution for problem C? Is it some kind of greedy/constructive algorithm based on number theory, or is it dynamic programming? The numbers are from 1 to N, so I assumed it was a number theory problem but couldn't come up with a solution.

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

    For numbers up to 3 answer is 'NO'.

    Solution for 4:
    1 * 2 = 2
    2 * 3 = 6
    6 * 4 = 24
    
    Solution for 5:
    5 - 3 = 2
    2 + 1 = 3
    2 * 3 = 6
    6 * 4 = 24
    
    Other solutions:
    N - (N - 1) = 1
    (N - 2) - (N - 3) = 1
    ...
    1 * 1 = 1
    ...
    <- solution for 4 if N is even or 5 if N is odd
    
  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Just notice this if(n<4) no soln if(n==4) 1*2*3*4=24 if(n==5) 4*5+3+2-1=24 and for all other numbers, if n is even then you do the 4 thingy and keep doing i+1-i=1 for all the numbers, and at last do 24*1=24 as many times is you need same thing for odd n, just you would use 5 thing

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

    You can get the 24 by using 2, 3, 4 or 1, 2, 3, 4. For the neighbor number, say, i and i + 1, we can get 1 by using - operator, and 1 can be eliminated by * with other number. Then I think you get the answer:-)

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

    if n is less than 4, obviously no solution. Then 2 cases, if n is even, we can reduce the sequence to 1,2,3,4 (after which we just multiply each element one at a time). By subtracting n and n — 1, multiplying 1 and 1, then n — 2 and n — 3 and so on.. if n is odd, you can similarly bring it to 1,2,3,4,5, we can reduce to 2,3,4 by doing the following: 1 + 5 = 6, 6 — 3 = 3. After this we just multiply each one again. Hope its clear :)

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

    A much easier solution is to get 1 by doing n-(n-1) and then 1-1=0. Now do i*0=0 for all i from 5 to n-2. And then do 2*3*4 = 24. For n<=6 pre calculate the ans. I hope you get it.

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

This contest reminds me of the Codeforces Round #146 (Div. 1) which was prepared by WJMZBMR... Codeforces Round 146 (Div. 1)

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

To those who have problems with div. 2 C here is my approach:

First print out the answer for cases n <= 5. Then for n > 6 you realize that you can make 24 by multiplying 6 and 4. Then you are left with the burden of creating n — 2 more operations, thus, you subtract adjacent numbers so you get a long chain of 1's, be careful that you cannot use 6 and 4 again. Then you simply keep alternating between: 1 — 1 = 0 1 — 0 = 1

until you are left with 1 or 0 then you can just do either 24 + 0 = 24 or 24 * 1 = 24

I did this approach during this contest and it seems to work. I was a bit dumb for the first hour because I forgot to print out "YES" at the beginning >.<

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

    Haha I forgot to print "YES too :P

    My solution was as follows: the n = 4 is easy, because we can just multiply 1 * 2 * 3 * 4 = 24. The n = 5 is a tiny bit trickier, but we have 4 * 5 = 20, then 20 + 2 + 3 — 1 = 24. Now, if n > 5, we can take the two largest numbers, n and n-1, and subtract n-1 from n to get 1. Now, our list is 1, 2, 3, ..., n-3, n-2, 1. If we multiply the two 1s, we are left with 1, 2, 3, ..., n-3, n-2, which is the list for n-2, a smaller case! This means that n = 6 will work, since we can reduce it to the n = 4 case, n = 7 will work, since we can reduce it to the n = 5 case, and so on.

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

    my answer is 1*2*3*4*(6-5)*(8-7)*...*(n-(n-1))=24 for n is even 5*4+3+2-1*(7-6)*(9-8)*...*(n-(n-1))=24 for n is odd

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

Как решается C(Div 2)?

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

    Реши руками для N = 4 и N = 5, забей в строковые константы.

    Если N < 4 то решения нет, иначе своди к случаям 4 и 5.

    Это можно сделать, отрезая с конца по 2 числа — превращая их в 1 (a[i] — a[i-1]), а потом умножая эту 1 на 1, которая уже есть.

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

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

Fuck math with no programming!

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

That was one fast system test!

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

Why so weak pretests???
I guess lots of Bs will fail.
Also there was too many WA2 in problem A... For constructive problems, first sample should be more difficult. :|

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

I spent all 2 hours on problem D but still cannot finish coding it...

Calculating "lexicographically smallest" one is very confusing, and I couldn't make solution without very complex iteration. Doesn't there exist any simpler solution?

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

    Indeed. If it weren't for this "lexicographically smallest" than it would be doable with centroids and that kind of stuff, but it is a significant obstacle :/.

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

      Yes. Thinking about centroid is fun, but I think main part of this problem is more complex part, because only 1 people solved it despite thinking about centroid is not so hard...

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

Like 90% of 469D - Two Sets has failed tests. Lol!

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

Wow, system test over in 10 minutes this time!

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

thanks for the fast system test~ I think I could back to blue.

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

problem A:

for n=1,2,3: no

for n=4 : 1*2*3*4

for n=5 : (3*1+5-2)*4

for n>=6 : 2*3*4+(6-5-1)*7*8*...*n

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

for div 2 B And D

what is the bug in my solutions ??

Code_B

Code_D

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

Isn't this code wrong 7871552 ??

Test: 2 1 0 0

1 5

2 4

7 7

UPD:The inputis illegal sorry.

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

Ehh..

if (n % 4 == 1) { ... cout<<"3+1 = 4\n"; ... }

There wasn't any pretest for n % 4 == 1? It's really disappointing :\

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

My solution for div-1 B using dinic's algorithm for maxflow TLEd :(

I thought it would run in O(E * sqrt(V)) time as all edges are of unit length. Can anyone please let me know why dinic would be suboptimal? Isn't it the same as Hopcroft-Karp for unit graph?

My Submission

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

By the way, somebody solved problem E in Division 1...

»
10 лет назад, # |
  Проголосовать: нравится +101 Проголосовать: не нравится
printf("24 * 1 = 1\n");

and Failed A...

What a sad story :((

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

Great test for problem D Div 2. Lots of Failed System Test

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

Can you give me an example on which my code doesn't work ? ( Sorry for my poor English) http://codeforces.me/contest/468/submission/7883022

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

I can not understand the reason why many of the chinese authors make hard and mathy problem set. In my opinion, contest's easy problem should be easy. Otherwise it is not motivating enough for people to participate.

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

I've entered for the next div2 contest.The konjac(its Chinese name ‘juruo’ means the people with low level like me) has no human rights.

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

winter is coming

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

when will the ratings be updated?

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

About Div1 B. Does anybody have a case with an odd n and positive answer? Or could explain why this is possible? I assumed this wasn't possible during the contest, but apparently it is. Maybe I misunderstood the problem.

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

can someone explain why this solution is incorrect? http://codeforces.me/contest/469/submission/7867443

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

    you should use resize not reserve

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

      reserve only reserves space but the size of your vector stays the same. it is only useful for example you read numbers and push them back of a vector. the vector resizes itself when you push back sometimes. if u know how many numbers u are going to push back then u reserve some memory and when u push a number back of the vector it doesnt allocate new memory

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

Извините, а кто-нибудь может подсказать, что не так с моим вариантом решения задачи D — ошибка на тесте 7876802 ?

В результате теста указано, что "wrong answer The 2-th set don't contain a-69950", но при ручной проверке вроде как подтверждается мой вариант решения — 69950 есть во втором наборе (416023 — 69950 346073, но нет в первом, что и отражено). А Множество B вообще не содержит значений (a-х), там только (b-x) же...

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

    Предположу, что если a-69950 не содержится во втором множестве, то оно содержится в первом. Значит, и 69950 должно содержаться в первом. А оно у вас, как вы говорите, во втором — уже несостыковка.

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

    Имел ввиду, что в сете 2 вообще не может быть значений (a-х), они в сете 1. В сете 2 только (b-x).

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

      Ещё раз повторю, что если какое-то число X находится во множестве 2, то и число a — X обязано находиться во множестве 2 (подумайте, почему), отсюда и связь между множеством 2 и числом a.

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

    Вроде у вас во втором множестве числа 69950 и 345665, разве нет?

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

How to solve Div 2D/ DIV 1B ?

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

Task D div 2 (Two Sets) Test Case 9:

How could the correct answer be YES 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ?

when it is stated in the text: If there is a way to divide the numbers into two sets, then print "YES" in the first line.

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

Can any one please point out the mistake in my code. I am a newbie and am unable to find the glitch in CODE 469D. Thanks in advance

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

When will they update ratings?

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

Chinese Round again, so difficult problems again...

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

Can anyone tell me what's wrong with my code for problem D, please?

7882442

Thank you!

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

    Check this test:

    10 12 14

    3 2 10 9 4 9 3 2 5 10

    Answer is:

    YES

    0 0 1 1 1 0 0 0 1 0

    Edit: Sorry. Test is incorrect.

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

      Explanation: Some numbers may occur several times and you should put some of them in set A, and some other in set B.

      Edit: It's not true. My mistake.

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

very interesting and enjoyable problem indeed..i enjoyed this very much :D

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

I have a question regarding this submission 7868179 Div.2 problem A .. I unsuccessfully tried to hack the solution using a testcase where the algorithm will try to access h[100] while the size of the array is actually 100! so the last element i can access is h[99], but the hack was unsuccessful .. any explanation ??

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

    When you access beyond the range of an array in C/C++, it gives an undefined behavior. This undefined behavior may or may not throw an exception.

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

My first time doing the first three problems . Best wishes.

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

So much math, it's awesome round!

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

jqdai0815 Thanks! It was a great Round!

Could anyone clarify on grading policy?

I've successfully submitted solutions for 2 tasks without penalties or resubmissions but my final round score is negative why it could be so?

Thanks!

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

I just wanted to leave this here: 7878473

In case you're too lazy to open, here is the whole accepted code to C in Python (authored by ZhouYuChen)

m = int(input())
x,t=10**100-1,m-100*45*10**99%m
print(t,t+x)

I have to say that I'm impressed :P

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

    A really neat/impressive solution!!

    What is the logic behind the solution?

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

      Let S(l, r) be the sum of digits of numbers form interval [l, r]. Take big k and see that S(1, 10k) = S(2, 10k + 1) - 1 = S(3, 10k + 2) - 2 = ...

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

        Here we have with x=10^100 — 1 and t=m-(450*10^100)%m = m-r , where r<m

        S(t,t+x) = S(1,1+x)+(t-1) = S(1,10^100)+(m-r-1)

        Above must be equal to 0 when taken mod m

        (S(1,10^100)+(m-r-1))%m should be = 0

        S(1,10^100)%m + (-r-1)%m

        If the above steps are accurate, I cant follow the proof after that.

        Can you please explain?

        Thanks.

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

          You are taking a hard way to understand this problem. I used the same idea and I think I can explain more clearly.

          There are 4 things to observe:

          1) S(1,10^k) = 45 * k * 10^(k-1) + 1

          You can try to convince yourself doing some mathematical proof or just run a script that calculates in a brute force fashion when k is small.

          2) S(1,10^k) = S(2,10^k)-1 = S(n+1,10^k+n)-n

          This is the trickiest part! In the first case, l = 1 and r = 10^k. What happens if we increase them both? l = 2 and r = 10^k+1. In this case, we "removed" one element whose function value equals to 1 and "added" another one whose value is 2 (10^k+1 has two 1's and a lot of 0). You can observe (by induction) that the same holds for any value we add to both l and r. Therefore, this formula I wrote here is correct

          3) S(1,10^k) % M = x if and only if S(M-x+1,10^k+M-x) % M = 0

          Well, if you add M-x to both boundaries of S(1,10^k), you will have S(1,10^k) = S(M-x+1,M-x10^k) + x — M, according to property (2). Then you take modulo M and you will have S(M-x+1,M-x10^k) % M = [ S(1,10^k) + M — x ] % M = [ x + M — x ] % M.

          4) S(1,10^17) > 7 * 10^18

          Finally, as a is at most 10^18, you have to find a power of 10 that guarantees a sum that is greater than that value. I wrote a simple script in Python that calculated S(1,10^k), according to formula (1), for some k and I found that k = 17 was enough.

          If you have any further questions, you can take a look at my last submission for this code or write a message.

          Regards

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

Can someone explain the greedy approach to Div.2 D / Div. 1 B Two Sets?

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

This round taught me a lesson and warned me about my deficiency in coding details. Besides I eventually understood that you may never think about getting more rating in Chinese Round. But actually it may not be the reason for not participating the contest, for the main purpose that we compete in CF isn't the for the rating. Even so, there will be a long time for me to regain my confident and to participate another round especially the Chinese Round.

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

Can anybody explain what is the flaw in my approach Solution ?

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

Can any one tell how to approach problems in competition so that it takes less time complexity and how to approach math problem fastly.

And what's the time complexity of program if i write n^2 solution to the problem in test case loop.