KK-정렬

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

요약
순열이 주어질 때 i번째와 (i+K) mod N번째 원소를 교환하는 연산만으로 오름차순 정렬이 가능한지 판별한다.
난이도

보통10점 중 5점

유형
수학, 배열, 유니온 파인드
정답자
아직 제출이 없습니다

문제

길이 NN의 순열 A=\[A_0,A_1,…,A_N−1]A=\[A\_0, A\_1, \dots, A\_{N-1}]이 주어진다. 길이 NN의 순열이란, 00부터 N−1N-1까지의 모든 정수가 정확히 한 번씩 등장하는 수열이다.

양의 정수 KK가 주어질 때, 다음과 같은 연산을 원하는 만큼 수행할 수 있다.

  • 임의의 ii (0≤i<N0 \leq i < N)에 대해 A_iA\_i와 A_(i+K) mod NA\_{(i+K) \bmod N}의 값을 바꾼다.

주어진 연산을 통해 순열 AA를 오름차순으로 정렬할 수 있는지 확인해 보자.

 mod \bmod 연산에 대한 설명은 노트를 참고하라.

입력

첫 번째 줄에 순열의 길이 NN과 양의 정수 KK가 공백으로 구분되어 주어진다. (1≤K≤N≤106)\left(1 \leq K \leq N \leq 10^{6}\right)

두 번째 줄에 순열 AA의 원소 A_0,A_1,…,A_N−1A\_0, A\_1, \dots, A\_{N-1}이 공백으로 구분되어 주어진다. 순열은 00부터 N−1N-1까지의 정수가 한 번씩 주어진다.

출력

주어진 연산을 원하는 만큼 반복하여 순열 AA를 오름차순으로 정렬할 수 있다면 YES, 아니면 NO를 출력한다.

힌트

 mod \bmod는 나머지 연산으로, a mod ba \bmod b는 aa를 bb로 나눈 나머지를 뜻한다. 예를 들어, 5 mod 3=25 \bmod 3 = 2이다.

예제2

  1. 예제 1

    입력
    6 2
    2 3 4 1 0 5
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    4 2
    0 1 3 2
    
    예상 출력
    NO