[BOJ 13178] 목공

an=i=1NaniCi+1a_n = \sum_{i=1}^{N} a_{n-i} C_i + 1

위 점화식을 만족하는 수열 ana_nN16000N\le 16000, n1012n \le 10^{12} 범위에서 계산해야 한다. (표기에서 문제의 MMnn을 혼용함)

an=i=1NaniCia_n = \sum_{i=1}^{N} a_{n-i} C_i

위 점화식을 만족하는 수열 ana_n의 경우 키타사마법을 이용하되 FFT를 이용한 O(NlogN)O(NlogN) 시간 곱셈/나눗셈을 하면 O(NlogNlogM)O(NlogNlogM)만에 계산할 수 있다.

상수항을 구현하기 위해 ana_n 대신 an=bnkna_n=b_n-kn을 넣어주면 상수항을 쉽게 없앨 수 있다.

일반항을 구하는 관점에서는 an=rina_n= \sum r_i^n 대신(얘는 상수항이 걸려서 점화식 만족이 안된다) an=rin+kna_n=\sum r_i^n + kn을 채택하여 kk를 적당히 조정하여 점화식을 만족시키는 거라고 볼 수 있다.

참고로 an=rin+ka_n=\sum r_i^n +k는 아무 쓸모 없다. 보통은 쓸모가 있었을텐데 이 문제의 경우 특수하게 계수의 합 Ci=1\sum C_i=1이어서, k(Ci1)=1k(\sum C_i -1)=1이 되어 kk를 어떻게 정하든 방정식을 만족시키지 못하고 상수항을 못 없앤다.