Георгий:
В разборе упущен такой, например, вариант: 79899100101 -> 97~98~99~100~101
Чтобы не усложнять жизнь, можно так переделать метод:
не разбиваем всё число на двузначные группы, а выбираем лишь первую - в этом случае 98 - и продолжаем её вправо и влево арифм. прогрессией.
Георгий: Ну давайте попробуем еще раз.
Возьмем для простоты конкретный пример - число 767867
Первый заход - пробуем разбить число на группы из одной цифры и смотрим, не цепочка ли это из возрастающих чисел: 7~6~7~8~6~7 - нет
Второй заход - пробуем разбить число на группы из 2 цифр, тут уже 2 варианта
76~78~67 - нет
7~67~86~7 - на края мы даже не смотрим, серёдка не бьёт
Третий заход - 3 варианта
767~867 - нет
7~678~67 - вутренних противоречий не выявлено (в середке одно число, не с чем сопоставлять)
76~786~7 - вутренних противоречий не выявлено
разбираем подробнее
7~678~67 => хорошо бы (678-1)~678~(678+1)==677~678~679, голова подходит, хвост подходит
76~786~7 => хорошо бы (786-1)~786~(786+1)==785~786~787, ни голова ни хвост не подходят
Всё, надо посчитать индекс вхождения числа(!) 678 и что-то там вычесть.
До 678 встречаются все однозначные числа - 9штук*1цифра, все двузачные (от 10 до 99 - 90штук*2цифры) и (677-99)*3цифры.
E6APB: Хотите поработать руками? Это можно ).
1. Подготовьте данные: побейте каждый полигон на треугольники. Для невыпуклых полигонов надо быть аккуратным.
2. Напишите код для проверки, относится ли точка к треугольнику - это несложно.
3. Создайте вспомогательную стуктуру - кэш по квадратной сетке, в каждой клетке - треугольники, которые на неё попадают.
4. Теперь всё будет летать.
Плюсанул, так как ответ насыщен конкретными утверждениями.
Вопросы есть, однако ) Не обессудьте - чиркните ответ.
3.2) - что это и как?
4) - что за 4 способа?
5) - это как?