[17071] 숨바꼭질 5

[17071] 숨바꼭질 5

#include < bits / stdc + + .h >

using namespace std ;

const int MAX = 500000 ;

typedef struct {

int x, turn;

} state;

int n, k, visited[ 2 * MAX + 1 ][ 2 ];

queue < state > q;

int main( void ) {

int i, j;

cin > > n > > k;

fill( & visited[ 0 ][ 0 ], & visited[MAX + 1 ][ 2 ], - 1 );

q.push({n, 0 });

while ( ! q.empty()) {

state cur = q. front ();

q. pop ();

if (cur.x > MAX | | cur.x < 0 ) continue ;

if (visited[cur.x][cur.turn % 2 ] ! = - 1 ) continue ;

visited[cur.x][cur.turn % 2 ] = cur.turn;

q.push({cur.x - 1 , cur.turn + 1 });

q.push({cur.x + 1 , cur.turn + 1 });

q.push({ 2 * cur.x, cur.turn + 1 });

}

for (i = k, j = 0 ; i < = MAX; j + + , i = i + j) {

if (visited[i][j % 2 ] ! = - 1 & & visited[i][j % 2 ] < = j) {

cout < < j;

return 0 ;

}

}

cout < < "-1" ;

return 0 ;

}

from http://dizlet.tistory.com/126 by ccl(A) rewrite - 2021-10-11 04:01:09