[Round#419 Div.2] D. Karen and Test 본문

Algorithm/CodeForces

[Round#419 Div.2] D. Karen and Test

previc 2017. 6. 21. 00:05

http://codeforces.com/contest/816/problem/D


a_1부터 a_N까지 N개의 수열이 있을 때, b_1 = a_1 + a_2, b_2 = a_2 - a_3 ... 이런 식으로 그 다음 줄에 b_n을 만든다.


같은 과정을 반복하여 수열의 수가 1개가 될 때 까지 진행했을 때 나오는 수가 뭔지 구하는 문제이다.


(말보다는 그림이 이해하기 편하니 아래그림 참조)





 첫번째 줄 부터 계산하다 보면 4번째 줄에 와서 규칙성을 찾을 수 있는데, 바로 이항계수이다.


구체적으로 말하면, 1번째 수열들을라 하면, 


5번째 줄에 나타나는 수열들은 형태를 띈다.


즉, 첫 번째 줄에 있는 수열을 라 하면,

4줄 아래있는 5번째 줄에 나타나는 수열은 이 되고,

 

다시 4줄 아래에 있는 9번째 줄에 나타나는 수열은 꼴이 된다.

 


따라서 총 N개의 수가 주어지면 계산되어지는 줄 수는 N-1줄이고, 결국 (N-1)%4 를 기준으로 이항계수를 계수로 갖는 수열들의 합을 구해주면 O(N)만에 풀어낼 수 있다.


위의 예제에서도 5번째 줄에 나타나는 수(결국엔 최종 답)는 1×3+2×9+1×15=36으로 O(N)에 구할 수 있다.