F(x)=∑i=0Ncixi라 하자. N=0이면 F 자체가 팰린드롬이므로 그대로 출력하면 된다. 이제 N≥1이라고 하자.
길이가 각각 N+1, N인 계수열 a0,⋯,aN과 b0,⋯,bN−1을 만들고
g(x)=i=0∑Naixi,h(x)=i=0∑N−1bixi
라 하자. 먼저
a0=aN=cN
으로 둔다. 그리고 i=0,1,⋯,⌊2N−1⌋에 대하여 다음을 순서대로 계산한다. 모든 계산은 M을 법으로 한다.
bi=ci−ai,bN−1−i=bi,
ai+1=cN−1−i−bi,aN−1−i=ai+1.
각 단계에서 b의 바깥쪽 두 계수와 그 다음 a의 바깥쪽 두 계수를 동시에 맞춘다. 따라서 반복이 끝나면 ai=aN−i가 모든 i에 대해 성립하여 g가 팰린드롬이고, bi=bN−1−i도 성립한다. 또한 각 계수를 직접 대입하면
F=g+h
가 성립한다.
h=0이면 g 하나만 출력하면 된다. h=0이고 b0=0이면 bN−1=b0=0이므로 h의 차수는 N−1이고, h 자체가 팰린드롬이다. 이 경우 g,h 두 개를 출력하면 된다.
남은 경우는 h=0이고 b0=0인 경우이다. bk=0인 가장 작은 k를 잡자. b의 대칭성 때문에 바깥쪽의 k개 계수는 양쪽 모두 0이고, bN−1−k=bk=0이다. 따라서
d=N−1−2k,
r(x)=j=0∑dbj+kxj
로 두면 r은 0이 아닌 팰린드롬이고
h=xkr
이다.
이제
s=r+xkr
로 두자. r이 차수 d의 팰린드롬이므로 s의 계수열은 차수 d+k를 기준으로 대칭이다. 따라서 s도 팰린드롬이다. 또한 −r도 팰린드롬이고
s+(−r)=xkr=h
이므로
F=g+s+(−r)
를 얻는다.
g의 최고차항 계수는 cN=0이다. 두 번째 경우의 h는 최고차항 계수가 b0=0이고, 마지막 경우의 r,s,−r 역시 구성상 최고차항 계수가 0이 아니다. 따라서 출력하는 모든 다항식은 문제의 정의를 만족한다.
각 계수는 상수 번만 처리되므로 한 테스트 케이스의 시간 복잡도는 O(N), 추가 메모리는 O(N)이다. 전체 입력에 대해서는 O(∑(N+1))이다. 이 과정은 덧셈과 뺄셈만 사용하므로 M이 소수일 필요가 없다.
Solution written by GPT5.6