하이퍼큐브

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

요약
한 비트만 다른 라벨을 잇는 N-하이퍼큐브에서 M의 최대 선행 노드와 최소 후행 노드를 구하고, 길이 K인 경로의 개수를 센다.
난이도

보통10점 중 7점

유형
조합론, 비트 연산, 수학, 동적 계획법
정답자
아직 제출이 없습니다

문제

N-하이퍼큐브는 0부터 2N−12^N - 1까지의 수가 붙은 2N2^N개의 노드로 이루어진 방향 비순환 그래프이다. 노드 xx에서 노드 yy로 가는 간선이 존재할 필요충분조건은 x<yx < y이면서 x⊕y=2px \oplus y = 2^p인 음이 아닌 정수 pp가 존재하는 것이다. 여기서 ⊕\oplus는 비트 XOR 연산이다.

양의 정수 NN, MM, KK가 주어졌을 때 다음 세 가지를 계산하라.

  1. N-하이퍼큐브에 속한 노드 중 ii에서 MM으로 가는 간선이 있는 노드 ii의 최댓값.
  2. N-하이퍼큐브에 속한 노드 중 MM에서 jj로 가는 간선이 있는 노드 jj의 최솟값.
  3. N-하이퍼큐브에서 찾을 수 있는 길이 KK인 경로(간선이 KK개인 경로)의 개수. 이 수는 매우 클 수 있으므로 100003으로 나눈 나머지를 구하라.

입력

첫째 줄에 세 수 NN, MM, KK가 공백 하나를 사이에 두고 주어진다.

출력

첫째 줄에 1번 문제의 답을, 둘째 줄에 2번 문제의 답을, 셋째 줄에 3번 문제의 답을 출력한다.

제한

  • 2≤K≤N≤100,0002 \le K \le N \le 100{,}000
  • 1≤M≤100,000,0001 \le M \le 100{,}000{,}000
  • 주어지는 MM에 대해 노드 MM에서 나가는 간선과 노드 MM으로 들어오는 간선이 각각 하나 이상 존재한다.
  • 3번 문제의 답은 100003으로 나눈 나머지로 구해야 한다.
  • ⊕\oplus는 비트 XOR 연산이다.

예제1

  1. 예제 1

    입력
    4 3 2
    
    예상 출력
    2
    7
    48