Logo
(追記) (追記ここまで)

알고리즘 초보의 시간초과

25614번 - 자리 바꾸기

알고리즘 초보입니다. 멋도 모르고 경시대회 1이 더 쉬운건줄 알고 도전해봤는데 지금 너무 어지러워용..

나름대로 시간을 엄청 줄여본거 같은데 시간초과 해결이 안 될거 같아요.

알고리즘 힌트 가능하신가요 고수님들?

m 제한이 10^200000 으로 매우 커서, 직접 한 단계씩 해보는 것으로는 문제를 풀 수가 없습니다.

작은 경우들을 한 단계씩 만들어가면서 출력해보세요. 어떤 규칙이 보일지도 몰라요.

예를 들어 n=4이고 A = [2, 3, 4, 1]인 경우, m=1일 때부터 쭉 나열해보면 다음과 같습니다.

(2, 3, 4, 1) -> (3, 4, 1, 2) -> (4, 1, 2, 3) -> (1, 2, 3, 4)

-> (2, 3, 4, 1) -> (3, 4, 1, 2) -> (4, 1, 2, 3) -> (1, 2, 3, 4)

-> (2, 3, 4, 1) -> ...

물론 [2, 3, 4, 1]은 규칙을 찾기 쉬운 경우인 편에 속합니다. 예제의 경우 좀 더 많이 나열해야 주기가 보일 것입니다. 그 주기가 어떻게 나온 것인지, 작은 단위로 나눠서 생각하면 그 주기가 더 줄어들 수 있을지 고민해봅시다.

여기까지 모두 이해했다면 문제를 거의 푼 것이지만, "큰 수의 처리" 부분에서 한가지 tricky한 부분이 있습니다. 파이썬에서 MOD 연산이나, 다른 모든 나머지를 구하는 방법이 수의 길이 L만큼의 연산을 필요로 한다는 점을 잘 생각해야 합니다. L * 200000은 이 문제에서 다소 큽니다.

답변 감사합니다. 실력을 더 키워서 다시 도전해 보겠습니다 :)

댓글을 작성하려면 로그인해야 합니다.

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /