Рассмотрим задачу о перемещении конфеты из позиции (x1, y1) в позицию (x2, y2). Очевидно, что каждым движением мы увеличиваем или уменьшаем x1 на a и y1 на b.
Тогда несложно догадаться, что если |x2 - x1| не делится нацело на a или |y2 - x1| не делится нацело на a, то добраться не возможно.
Стоит также заметить, что числа |x2 - x1| / a и |y2 - y1| / b должны быть одинаковы по парности, так как увеличение или уменьшение происходит одновременно для обоих значений.
Помимо этого, нужно отдельно рассмотреть случай, когда ход выводит нас за границы доски, это не допустимо.
Теперь мы можем определить сложность пути позиции (x1, y1) в позицию (x2, y2) как max(|x1 - x2| / a, |y1 - y2| / b).
Посчитаем это для всех четырех углов и выберем максимум, либо определим, что добраться не возможно.
Очевидно, что мы можем разбить задачу на подзадачи, так как если рядом не стоят цифры с суммой 9, то число будет независимо изменяться, относительно позиции между этими числами. Это значит, что мы разделим задачу на подзадачи вида x либо xyxyxyx...xyxy причем x + y = 9. Ответ для таких отрезков нужно будет перемножить, так как мы ищем общее количество вариантов.
Для x ответ 1. Что же делать с xyxyxy? Пусть длинна ее s. Тогда, если s парное, мы однозначно получаем s / 2 девяток. Если же s не парное, одна цифра (причем любая) останется. Таким образом каждая последовательность xyxyxyxyx...xyxyxy непарной длинны s увеличивает ответ в s / 2 + 1 раз.
По сути, задача сводится к нахождению цикла и поиску максимального пути, однако, решим ее без построения графа.
Запустим обход в глубину из каждой буквы D, запоминая уже обработанные позиции. Если мы попали в позицию, в которой уже были раньше (зашли в нее обходом из других D) тогда можем просто прибавить длину текущего пути к длине максимального пути из этой позиции. Длина пути, заметьте, растет нe с каждый переходом, а только с переходом в букву A. Если же мы попали в позицию, помеченную номером нашей буквы D (из которой мы начали), значит, имеет место цикл, и поиски можно заканчивать. Не забудьте также менять цвет позиции при выходе из рекурсии, иначе будет "ложный цикл", таким образом, помеченными "нашим" цветом должны быть только позиции, в которые мы зашли рекурсивно, но еще не вышли.
374D — Инна и последовательность
Заметим, что всего будет добавлено не более n чисел, а следовательно вылетов тоже будет не более n. Будем имитировать процесс с помощью структур данных, к примеру, деревом отрезков (можно и другими). Будем поддерживать количество чисел, которое есть на подотрезке. Соответственно добавление — спускаемся от корня до листа, увеличивая на единичку значения. Удаление — с точностью до наоборот. Если в левом поддереве не достаточно элементов, спускаемся в правое, иначе — в левой. Не забудьте также смещать позицию дырки на ее номер (так как вылеты у нас моментальные из всех дырок) и останавливать цикл при достижении первой дырки, позиция которой больше текущего количества элементов.
Будем делать бинпоиск по ответу (очевидно, что функция монотонная). Для каждого времени генерируем наши отрезки, и повернем их на 45 градусов так, чтобы они стали вертикальными и горизонтальными. Это можно сделать заменой (x, y) — (x + y, x - y). Не забудьте слить отрезки, стоящие на одной диагонали и имеющие пересечения в один. Для этого нужно отсортировать все отрезки, и пройтись подряд, обновляя правую или нижнюю границу соответственного отрезка. Теперь осталось проверить, можно ли из текущих отрезков сложить прямоугольник. К примеру, можно перебирать левый вертикальный отрезок, поддерживая множество всех горизонтальных, которые начинаются не позже него, затем, для каждого левого вертикального перебирать правый вертикальный, поддерживая уже множество горизонтальных, которые начинаются не позже левого, но и заканчиваются не раньше правого. Теперь осталось только убедится, что есть хотя бы два горизонтальных отрезка из множества, которые, к тому же удовлетворяют еще и неравенство по y-кам.
Слова парное нет в русском.
UPD Хотя там и решение неправилное..
Молоко есть.
По задаче B Таким образом каждая последовательность xyxyxyxyx...xyxyxy непарной длинны s увеличивает ответ в s раз да?
Hm...
Подскажите пожалуйста, что я не учел в коде к задаче А или в подходе (подход как у автора)? Сижу пол часа, ориентируюсь на претест 4, и все равно не понимаю. Разбор от автора прочитал. http://codeforces.net/contest/374/submission/5466114
Деление должно быть целочисленным.
В первой задаче скорее всего надо взять минимум, а не максимум. ("Посчитаем это для всех четырех углов и выберем максимум...")
Насколько мне известно, слово "пони" — мужского рода, а не среднего, как в заголовке задачи A. Или это авторское изменение рода? :)
В задаче B, если s — нечётное ( s упоминается в разборе), то без пары останется ровно одна цифра, но не любая. И всего будет не s, а (s+1) / 2 всевозможных вариантов оставить цифру без пары, сохранив при этом наибольшее количество девяток. Например, в первом семпле был фрагмент "727" ( s = 3). Без пары мы можем оставить только либо первую семёрку, либо последнюю. Если оставим без пары двойку, то количество девяток, которые мы можем получить, не будет максимальным. Таким образом, каждая последовательность непарной длины s увеличивает ответ не в s, а в (s+1) / 2 раз.
UPD: теперь правильно.
In 374A why both |x2-x1|/a and |y2-y1|/b must be either even or odd??
Well, you can only jump in a diagonal direction, so try drawing your way if you had to go:
2 up and 2 left
3 up and 3 left
2 up and 1 left
Only using \ or / jumps.
let's say that u make a1 moves where u decrease x by a, a2 moves where u increase x by a, b1 moves where u decrease y by b, and b2 moves where u increase y by b. now since number of moves is independent of direction, we must have
a1+a2 = b1+b2
.now if the start point is
(x1,y1)
and the end point is(x2,y2)
, we have(x2-x1)/a = a2-a1
and(y2-y1)/b = b2-b1
. adding these two results in(x2-x1)/a + (y2-y1)/b = (a2-a1) + (b2-b1)
.the above two equations tell us that the LHS of the second equation is even.
In problem B when the length of sequence is odd, answer must be increased in s/2+1 times. For example in xyxyxy...xyx any x can stay, and there are s/2+1 x.
Почему в задаче D не заходит решение 5473766? Я не понял условие или просто руки кривые?Кривые руки и не туда направленные глаза %)Я придумал похожее решение. Почему эта идея неправильная?
По-моему, мы просто накосячили при вычислении k. Просто там есть несколько крайних случаев.
Хотя нет, похоже k вычисляется правильно. Тогда действительно не понятно, что не так
Походу я понял.
Дима сильно стукает кулаком по столу. При этом a1-е, a2-е, a3-е, ..., ak-е числа от начала одновременно вылетают из последовательности
Мы удаляем не первые k элементов, а a[1], a[2] ... a[k] по счету. То есть в первом тесте сначала удалится не первые две единицы, а первый и 3-й элементы (1 и 0).
Действительно, это так, судя по правильным посылкам :)
Надо было сразу на решения глянуть..
For the first question: Last case: 1 5 1 3 1 1 I guess The answer exists and its 2. first step 1+1,3+1 2-1,4+1
My program gave wrong answer on test 37. http://codeforces.net/contest/374/submission/5464380
cause (1+1,3+1) is outside of the board
I have a question (may be silly) about question D, when i look at some implementations for , it seems that for most of them complexity is like O(n*m*log(n)) (segment tree/bit )*(enumerating m)*(treating n query 1by1) ,why can these passes with n,m at 10^6 scale
It is guaranteed that you will only attempt to access your segment tree/bit O(n) times because you can have only O(n) elements to drop.