Processing math: 100%

19-я Международная Жаутыковская олимпиада по математике, 2023 год


У Пети есть 1001 карточка, на которых написаны синей ручкой числа 1,2,,1001; на каждой карточке написано ровно одно число. Петя выложил карточки по кругу синими числами вниз. Затем для каждой карточки C Петя рассмотрел 500 карточек, следующих за C по часовой стрелке, и нашёл количество f(C) тех из них, на которых синие числа больше, чем синее число на C. Число f(C) Петя написал на верхней стороне карточки C красной ручкой. Докажите, что Вася, видя только все красные числа, может восстановить, какое синее число на какой карточке написано. ( И. Богданов )
посмотреть в олимпиаде

Комментарий/решение:

пред. Правка 2   1
2 года 1 месяца назад #

Примечание: Если у первой карточки по часовой стрелке в следующих 500 карт встретится вторая, назовем ее бьющей вторую.

Факт #1:

Если выбрать любые две карты, одна будет бить другую и никогда две карты бить друг друга не будут (доказать легко).

Факт #2:

Карта с синей отметкой a (a501) могла лежать лишь на картах с красной отметкой: 0,1,,1001a.

Процесс нахождения:

Мы будем искать сперва 1001, потом зная нахождение 1001, найдем 1000, а после зная места 1001,1000 найдем 999 и так далее…

Поиск 1001 очень легок, рассмотрим под кандидатуру лишь карты с 0 (#2), и в этом случае можно понять что если первая карта с 0 бьет вторую, то эта карта больше чем вторая, значит найдем самую большую карту с надписью 0 (все карты бьют друг друга, #1), там и будет лежать 1001. Теперь вместо 0 на этой карте напишем синей ручкой 1001 (для удобства).

Найдем карту a если нам известны карты 1001,1000,,a+1. Для начала рассмотрим только карты с 0,1,,1001a (#2). Допустим мы рассматриваем лучшего кандидата с карточек с красной надписью b из этих чисел. Заметим, кандидатами из таких карточек нужно учитывать только тех у кого в следующие 500 чисел по часовой уже лежит ровно b уже определенных чисел. Если будет меньше, то почему то наша карта a будет меньше какой-то неопределенной карты (что невозможно, ибо мы определили все карты больше a). А больше быть очевидно не может быть ибо на карте b не могло бы быть написано. Пусть это будет называться первым фильтром.

После первого фильтра, сделаем второй, он выглядит таким образом:

Теперь рассмотрим опять же карточки с красной надписью b которые уже прошли первый фильтр. По #1, каждая карта бьет другую, а значит больше, ибо мы же знаем все числа которые больше a, значит любое неопределенное число в поле 500 чисел по часовой у карты с b всегда ее меньше, значит бьющая больше принимающей удар. Это фильтр 2. Так, по #1 мы выведем лишь одного кандидата с b, и так сделаем с каждым (если остались карты) b [0,1,,1001a] и выдвинем всех кандидатов. По #1, опять же каждая бьет другую, а значит больше по такому же принципу как в фильтре 2. Так, мы получим лишь одного кандидата, там будет лежать наш заветный a. Напишем на этой карте синим a что бы запомнить.

Таким образом, мы сделаем с каждой картой от 1001 до 501, а после, можно вообще забыть про эти карты и все красные карты с a переписать в 1001a и найти сперва 0, потом зная 0, 1 и так далее до 500, что и требовалось доказать.

  2
2 года 1 месяца назад #

Мотивация: Впринципе кажись сразу было понятно что это верно даже если будет 2k+1 карт и мы будем рассматривать k карт по часовой. Вот и я нарисовал 11 чисел по кругу и пробовал восстановить. Было довольно просто понять что легче всего начать с самых крайних чисел (11 или 0), ибо у них сокращено количество кандидатов, потом я искал 10 так будто мне было ясно где лежит 11 но как бы не совсем точно, и мне нужно было найти алгоритм что бы спускаться, и я его нашел :D

  5
1 года 3 месяца назад #

Мы называем карту видимой, если знаем значение синего цвета на ней. Мы попробуем найти невидимую карту максимума (карта является максимальной, если синее значение на ней самое большое) одну за другой. Допустим, некоторые карты видимы и не учитываются (как большее число) при написании красных чисел на других картах, а также предположим, что только невидимые карты имеют красные значения. Итак, наша задача — найти максимальную невидимую карту. Рассмотрим следующий алгоритм: пусть S — набор карточек с красным номером 0. Очевидно, что максимальная карта находится в S. Если |S|=1 мы уже нашли максимальную карту, так что все готово. В противном случае выберем любую карту AS. Если для всех BS dist(A,B)501 (Расстоянием от карты A до карты B мы называем количество карт, которые мы увидим, двигаясь по часовой стрелке от ОтA до B, dist(A,B) — это просто расстояние от этих карт). Можно сказать, что A — максимальная карта, поскольку значение синего цвета на ней больше, чем значение любой карты в наборе. Теперь рассмотрим карту C, для которой dist(A,C)>501 и dist(A,C) минимально возможно. Обратите внимание, что A и любая другая карта B со свойством dist(A,B)>501 входят в карты 500, следующие за C по часовой стрелке. С другой стороны, любая карта D со свойством dist(A,D)501 имеет меньшее значение синего цвета, чем карта A, которая имеет меньшее значение, чем C. Следовательно, C — это карта максимального достоинства. На каждом шаге мы можем найти максимальную невидимую карту и уменьшить стоимость карты стоимостью 500 против часовой стрелки на 1 (поскольку мы знаем, что эта карта считалась большей картой). Итак, в конце мы найдем каждую карту.

  0
4 месяца 18 дней назад #

Скажем A бьет B, если B лежит среди следующих 500 по часовой относительно A.

Очевидно, что если X не бьет Y, то Y бьет X

Число 1001 супер легко находится, а дальше найдем 1000:

давайте вычтем единицу у красных чисел которые били 1001. После этого по любому будет хотя бы одно красное число который равен 0(иначе это тоже самое, что сказать нет числа который был бы больше всех кроме 1001 среди чисел 1,2...1000, что очевидно неверно).

1) Если там только один красный 0, то все, мы нашли 1000

2) Если там несколько красных 0, то выберем красный 0 которого не бьет другой красный 0

Докажем, что такой обязательно существует.

Пусть A1,A2,...An- числа у которых красное число это 0. Тогда если вдруг нет числа которого кто то не бьет, то можем сказать, тут нет числа, который был бы больше всех. Но это неверно т.к. все числа разные.

Ну все, этот число с красным 0 которого никто не бьет будет наибольшим т.к. из того, что его никакой красный 0 не бьет, он бьет их всех т.е. больше их всех. Т.е. мы нашли число 1000.

Дальше вычтем единицу у красных чисел которые били число 1000.

Теперь можно легко найти 999 повторив тоже самое:

Найти красный 0 которого никто не бьет и все.

И повторив эти действия пока все числа не станут известными, мы раскрыли все числа ЧТД