아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

반복 차분

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

요약
각 수열에서 모든 항목을 다음 항목과의 절댓값 차로 바꾸는 과정을 반복하며, 모든 값이 같아질 때까지의 반복 횟수를 세고 1000회가 넘으면 실패를 출력한다.
난이도

보통10점 중 6점

유형
시뮬레이션, 구현, 배열, 수학
정답자
아직 제출이 없습니다

문제

N개의 음이 아닌 정수 a1,a2,…,aNa_1, a_2, \dots, a_N으로 이루어진 리스트가 주어진다. 이 리스트를 다음 규칙에 따라 새로운 리스트로 바꾼다. 새 리스트의 kk번째 원소는 ∣ak−ak+1∣|a_k - a_{k+1}|이며, 마지막 원소는 끝에서 앞으로 순환하여 ∣aN−a1∣|a_N - a_1|로 정의한다.

모든 원소가 같은 정수가 될 때까지 이 치환을 몇 번 반복해야 하는지 구하여라.

예를 들어 N=4N = 4이고 리스트가 (0, 2, 5, 11)로 시작하면, 반복 과정은 다음과 같다.

2 3 6 11
1 3 5 9
2 2 4 8
0 2 4 6
2 2 2 6
0 0 4 4
0 4 0 4
4 4 4 4

따라서 이 경우에는 8번의 반복이 필요하다. 만약 처음부터 모든 원소가 같다면 필요한 반복 횟수는 0이다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 두 줄로 주어진다. 첫째 줄에는 리스트의 원소 개수 NN (2≤N≤202 \le N \le 20)이 주어진다. 둘째 줄에는 NN개의 정수가 공백 하나로 구분되어 주어진다. N=0N = 0인 줄은 입력의 끝을 의미하며 처리하지 않는다.

출력

각 테스트 케이스마다 한 줄씩 출력한다. cc번째 테스트 케이스에 대해, 모든 원소가 같아지기까지 필요한 반복 횟수가 kk일 때 Case c: k iterations 형식으로 출력한다 (횟수와 관계없이 항상 iterations를 사용한다). 1000번 반복해도 모든 원소가 같아지지 않으면 Case c: not attained를 출력한다.

예제1

  1. 예제 1

    입력
    4
    0 2 5 11
    5
    0 2 5 11 3
    4
    300 8600 9000 4000
    16
    12 20 3 7 8 10 44 50 12 200 300 7 8 10 44 50
    3
    1 1 1
    4
    0 4 0 4
    0
    
    예상 출력
    Case 1: 8 iterations
    Case 2: not attained
    Case 3: 3 iterations
    Case 4: 50 iterations
    Case 5: 0 iterations
    Case 6: 1 iterations