[Luogu P1588] потеряли скот

Этот вопрос о абстракции от начальной точки, а затем после 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 ; 
}

 

рекомендация

отwww.cnblogs.com/lijilai-oi/p/10987874.html