Этот вопрос о абстракции от начальной точки, а затем после x2 координат или +1 или -1 к другому. Очевидно , что это проблема поиска, и , видимо , можно видеть , что число шагов до разности между координатами двух точек. Но диапазон данных из 10 5 , либо прямое воздействие , конечно , MLE поиск или TLE, конечно же нет, то не забудьте добавить оптимизации.
Отмечу , что диапазон координат (0,10 5 ], так что, если продолжается до точки вне этого диапазона , очевидно , не было бы решением, поэтому прямая обрезка. Мы используем BFS поиска, по- видимому , в первый раз для поиска что точка должна быть минимальное количество шагов в этой точке, то снова нет необходимости , чтобы достичь этой точки , а затем искать его снова, думая о какой - то памяти.
Так что последний прием пищи операция обрезки может представлять собой проблему, потому что, когда моделируются условия обрезка меньше причины MLEqwq.
# include <cstdio> #include <cstdlib> #include <алгоритм> #include <CString> #include <очереди> с использованием пространства имен зЬй; INT д [ 100010 ]; BOOL проверка ( INT х) { вернуться х> 0 && х < 100000 &&! д [х]; } INT S, T; структура qwq { INT х, шаг; }Топ; недействительный BFS () { очереди <qwq> Q; q.push ((qwq) {с, 1}); д [с] = 1 ; в то время как (q.size ()) { сверху = q.front (); q.pop (); если (top.x == т) возвращение ; если (проверка (top.x + 1 )) { q.push ((qwq) {top.x + 1 , top.step + 1 }); д [top.x + 1 ] = top.step + 1 ; } Если (проверка (top.x - 1 )) { q.push ((qwq) {top.x -1 , top.step + 1 }); д [top.x - 1 ] = top.step + 1 ; } Если (проверка (top.x << 1 )) { q.push ((qwq) {top.x << 1 , top.step + 1 }); д [top.x << 1 ] = top.step + 1 ; } } } INT основных () { INT тт; зсапЕ ( " % d " , & т); в то время как (tt-- ) { зсапЕ ( " % d% d " , & с, & т); MemSet (д, 0 , SizeOf (г)); BFS (); Е ( " % d \ п " , д [т] - 1 ); } Возвращает 0 ; }