RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R02014

분할 셔플

Gold V 골드 V
난이도
1s
시간 제한
128MB
메모리 제한
1
맞았습니다!!
1
제출 수
100.0%
정답률
레이팅

의견: 0

설명

분할 셔플이란, 연속된 수(\(a_i = a_{i-1}+1\))의 길이가 \(n\)이고 패턴의 개수가 \(k\)인 수열에서 수열을 반으로 나눠서 두번째 수열(\(nk/2+1 \sim nk\))을 첫번째 수열(\(1 \sim nk/2\)) 사이에 끼워넣는 연산이다. (수열을 반으로 나누어 뒤쪽 절반의 원소들을 앞쪽 절반의 원소들 사이에 끼워 넣는다.)

이 분할 셔플을 몇 번 해야 원본 수열로 순환하는지를 구하는 프로그램을 작성해야 한다.

예시로, \(n=4\), \(k=2\)라면 12341234이고, 이걸 원본 수열로 순환할 때까지 분할 셔플 해보면 다음과 같다:

12341234
11223344
13132424
12341234

정답: \(3\).

제약
  • \(n\), \(k\)\(2\)의 제곱수
  • \(2 \le n \le 2^{30}\)
  • \(1 \le k \le 2^{30}\)
입력 형식

첫번째 줄에 \(n\), \(k\)가 공백으로 구분되어 주어진다.

출력 형식

첫번째 줄에 정답을 출력한다.

서브태스크
서브태스크점수설명

1

10점

\(k = 1\)

2

30점

\(n \le 8,\ k \le 8\)

3

60점

추가 제약 조건 없음

예제 1
입력
4 2
출력
3
설명

본문과 같다.

예제 2
입력
4 4
출력
4
설명

1234123412341234 -> 1122334411223344 -> 1111222233334444 -> 1313131324242424 -> 1234123412341234

문제 정보

gras 작성

출처 Original

평가 및 의견

분할 셔플

개요
출제자 난이도 Gold V 골드 V 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

분할 셔플

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8