on
[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