만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

미로 속 보석

면접 대비

시간 제한3초메모리 제한2048 MB

요약
a, b, c, n이 주어졌을 때 방 v에서 (a*v^2 + b*v + c) mod n 방으로 계속 이동하며 서로 다른 방을 가장 많이 거치는 경우의 수를 구합니다.
난이도

보통10점 중 4점

유형
그래프, DFS, 배열
정답자
아직 제출이 없습니다

문제

스크루지 맥덕은 자신의 재산을 늘릴 새로운 계획을 세웠다. 그는 특별한 미로가 있는 고대 유적을 발견했다. 이 미로는 번호가 0부터 n-1까지 붙은 n개의 방으로 이루어진다. 각 방에는 보석이 정확히 하나씩 있다. 방들은 단방향 터널로 연결되어 있다. 각 방에서 나가는 터널은 정확히 두 개이다. 하나는 번호가 (a⋅v2+b⋅v+c) mod n(a \cdot v^2 + b \cdot v + c) \bmod n인 방으로 이어지고, 다른 하나는 미로 밖으로 이어진다.

미로의 어느 방에서든 들어가서 터널을 따라 이동하며 보석을 모을 수 있다. 미로 밖으로 나가는 순간 자폭 장치가 작동하여 천장이 무너지고, 가져가지 못한 보석은 모두 영원히 사라진다.

스크루지는 이 미로에서 가져갈 수 있는 보석의 최대 개수를 알고 싶어 한다.

입력

입력의 첫 줄에 이 미로를 정하는 정수 네 개 aa, bb, cc, nn이 주어진다.

출력

미로에서 가져갈 수 있는 보석의 최대 개수를 나타내는 정수 하나를 한 줄에 출력한다.

힌트

시작하는 방에 따라 결과가 달라진다. 예를 들어 첫 번째 테스트 케이스에서 스크루지가 0번 방에서 시작하면, 선택지는 0번 방으로 돌아가는 터널과 밖으로 나가는 터널뿐이라 고를 것이 거의 없다. 2번 방에서 시작해 2→8→16→32→0→2 \rightarrow 8 \rightarrow 16 \rightarrow 32 \rightarrow 0 \rightarrow 밖 순서로 따라가는 것이 훨씬 낫다.

예제3

  1. 예제 1

    입력
    1 2 0 64
    
    예상 출력
    5
    
  2. 예제 2

    입력
    0 2 1 47
    
    예상 출력
    23
    
  3. 예제 3

    입력
    0 3 5 128
    
    예상 출력
    64