소어그래프

시간 제한1초메모리 제한1024 MB

요약
N이 10^18까지 주어질 때, 각 정점 i에서 i⊕t와 (i⊕t)+1로 향하는 간선이 있는 방향 그래프에서 x에서 y로 가는 최소 간선 수를 구한다.
난이도

어려움10점 중 9점

유형
그래프, BFS, 비트 연산, 수학
정답자
아직 제출이 없습니다

문제

정점의 개수가 NN인 소어그래프(XOR Graph)는 다음과 같이 정의된다.

  • 소어그래프는 00부터 N−1N-1까지의 번호가 붙은 NN개의 정점을 가진다.
  • 각 정점 ii에 대해, 정점 ii에서 정점 i⊕ti\oplus t와 정점 (i⊕t)+1(i\oplus t) +1로 가는 방향 간선이 존재한다.
  • 단, 간선을 통해 이동하려는 도착 정점의 번호가 N−1N-1을 초과하는 경우, 해당 간선은 존재하지 않는다.

여기서 ⊕\oplus 기호는 Bitwise XOR을 나타낸다.

정점의 개수 NN, 시작 정점 xx, 도착 정점 yy, 그리고 음이 아닌 정수 tt가 주어질 때, 정점 xx에서 정점 yy로 이동하기 위해 지나야 하는 간선의 최소 개수를 구하는 프로그램을 작성하라.

입력

첫째 줄에 정수 NN, xx, yy, tt가 공백으로 구분되어 주어진다. (2≤N≤10182 \leq N \leq 10^{18}; 0≤x,y<N0 \leq x, y < N; x≠yx \neq y; 0≤t<2200 \leq t < 2^{20})

출력

정점 xx에서 정점 yy로 이동하기 위해 지나야 하는 간선의 최소 개수를 출력한다. 만약 정점 xx에서 정점 yy로 가는 경로가 존재하지 않는다면 −1-1을 출력한다.

예제3

  1. 예제 1

    입력
    4 2 3 2
    
    예상 출력
    2
    
  2. 예제 2

    입력
    10 7 9 6
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    165321961421 998244353 5029393147 98207
    
    예상 출력
    8242633