원형 셀룰러 오토마톤

시간 제한1초메모리 제한128 MB

요약
원형으로 배열된 n개의 셀에 대해 d-환경 합을 m으로 나눈 나머지로 갱신하는 연산을 k번 반복한 결과를, 다항식 거듭제곱이나 행렬 거듭제곱으로 효율적으로 계산합니다.
난이도

보통10점 중 7점

유형
수학, 행렬, 분할 정복
정답자
아직 제출이 없습니다

문제

셀룰러 오토마톤은 정해진 형태의 격자 위에 놓인 셀들의 모임으로, 이웃한 셀들의 상태로부터 각 셀의 새로운 상태를 정하는 규칙에 따라 여러 번의 이산적인 시간 단계를 거치며 변화한다. 셀룰러 오토마톤의 차수(order) 는 그것이 가진 셀의 개수이며, 차수가 nn 인 오토마톤의 셀에는 11 부터 nn 까지 번호를 매긴다.

셀의 차수 는 그 셀이 가질 수 있는 서로 다른 값의 개수이다. 차수가 mm 인 셀의 값은 00 이상 m−1m-1 이하의 정수이다.

셀룰러 오토마톤의 가장 근본적인 성질 중 하나는 그것이 놓인 격자의 종류이다. 이 문제에서는 특별한 종류, 즉 셀의 차수가 mm 이고 차수가 nn 인 원형 셀룰러 오토마톤을 다룬다. 이를 n,mn,m-오토마톤이라 부른다.

n,mn,m-오토마톤에서 셀 ii 와 셀 jj 사이의 거리는 min⁡(∣i−j∣,  n−∣i−j∣)\min(|i-j|,\; n-|i-j|) 로 정의한다. 어떤 셀의 dd-이웃(dd-environment)이란 그 셀과의 거리가 dd 이하인 모든 셀의 집합이다.

매 dd-스텝 마다 모든 셀의 값이 동시에 새 값으로 바뀐다. 셀 ii 의 새 값은 셀 ii 의 dd-이웃에 속하는 셀들의 값의 합을 mm 으로 나눈 나머지이다.

kk 번의 dd-스텝을 거친 뒤 n,mn,m-오토마톤의 상태를 구하여라.

입력

첫째 줄에 네 정수 nn, mm, dd, kk 가 주어진다 (1≤n≤5001 \le n \le 500, 1≤m≤1,000,0001 \le m \le 1{,}000{,}000, 0≤d<n/20 \le d < n/2, 1≤k≤10,000,0001 \le k \le 10{,}000{,}000). 둘째 줄에는 00 이상 m−1m-1 이하의 정수 nn 개가 주어지며, 이는 오토마톤 셀들의 초기 값이다.

출력

kk 번의 dd-스텝을 거친 뒤 n,mn,m-오토마톤의 각 셀의 값을 한 줄에 공백 하나로 구분하여 출력한다.

예제7

  1. 예제 1

    입력
    5 3 1 1
    1 2 2 1 2
    
    예상 출력
    2 2 2 2 1
    
  2. 예제 2

    입력
    5 3 1 10
    1 2 2 1 2
    
    예상 출력
    2 0 0 2 2
    
  3. 예제 3

    입력
    5 7 0 100
    3 1 4 1 5
    
    예상 출력
    3 1 4 1 5
    
  4. 예제 4

    입력
    1 1000000 0 10000000
    999999
    
    예상 출력
    999999
    
  5. 예제 5

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

    입력
    5 3 2 10000000
    1 2 2 1 2
    
    예상 출력
    1 1 1 1 1
    
  7. 예제 7

    입력
    7 10 3 3
    1 2 3 4 5 6 7
    
    예상 출력
    2 2 2 2 2 2 2