↵
[problem:617A]↵
↵
It's optimal to do the biggest possible step everytime. So elephant should↵
do several steps by distance 5 and one or zero step by smaller distance.↵
Answer equals to
↵
Оптимально делать наибольший возможный шаг каждый раз. Поэтому слоник должен сделать сначала некоторое количество шагов на расстояние 5, а затем один или ноль шагов на меньшее расстояние. Следовательно, ответ равен $\lceil\frac{x}{5}\rceil$.↵
↵
[
↵
[problem:617B]↵
↵
↵
Tricky case: when array contains only zeroes answer equals to 0.↵
↵
In general. Between two adjacent ones we must have only one separation.↵
So, answer equals to product of values $pos_i - pos_{i - 1}$ where $pos_i$ is position of i-th one.↵
↵
Bonus: what's the maximal possible answer for
↵
Особый случай: когда массив состоит только из нулей ответ равен нулю.↵
↵
Рассмотрим общий случай. Во-первых нули на префиксе относятся к первому куску, нули на суффиксе относятся ко второму куску. Во-вторых, между каждой парой соседних единиц должно быть одно и только одно разделение частей. Между соседними единицами с индексами $a < b$ всего $b - a$ вариантов разделения. Поэтому мы должны перемножить эти значения для всех пар соседних единиц.↵
↵
Бонус: каким является максимальный ответ при $n \leq 100$?↵
↵
[
↵
[problem:617C]↵
↵
Let's iterate over this numbers. Second radius equals to maximal distance from second fountain to flower↵
which doesn't belong to circle with first radius. Now we should choose variant with minimal
↵
↵
[
↵
[
↵
[problem:617D]↵
↵
↵
When answer equals to two? Let's iterate over all pairs of points.↵
Let first point in pair is beginning of polyline, second point is end.↵
Only one or two such polylines with answer two exist. If third point is on the polyline↵
it belongs to rectangle with corners in first two points. We can just check it.↵
↵
Else answer equals to three. We can build vertical lines which contains the most left↵
and the most right point and horizontal line through third point. If we↵
erase some excess rays we will get polyline.↵
↵
[Solution
↵
Когда ответ равен двум? Переберем все пары точек. Пусть первая точка является началом ломаной, вторая концом ломаной. Только одна или две таких ломаных с двумя звеньями существуют. Они образуют прямоугольник с противоположными углами в первой и второй точке. Мы можем просто проверить принадлежность третьей точки прямоугольнику.↵
↵
Иначе ответ всегда равен трем. Давайте построим вертикальные прямые через самую левую и через самую правую точки. Через третью точку построим горизонтальную прямую. Теперь, если мы удалим некоторые лишние лучи, получим подходящую ломаную.↵
↵
[Решение](http://pastebin.com/BGFK1wxd)↵
↵
[problem:617E]↵
↵
↵
↵
Xor
↵
↵
We can update in O(1) answer and $cnt$ if we move left or right border of query on 1.↵
So we can solve problem offline in $O((n + m)\sqrt{n})$ with sqrt-decomposion (Mo's algorithm).↵
↵
[Solution
↵
Мы можем обновить за $O(1)$ ответ и $cnt$ если мы изменим правую или левую границу запроса на 1.↵
↵
Поэтому мы можем решить задачу оффлайн за $O((n + m)\sqrt{n})$ с помощью корневой эвристики (алгоритм Мо).↵
↵
[Решение](http://pastebin.com/qggQDEu2)