현재 돌 무더기들의 크기를 x1,x2,…,xm이라 하고, 현재까지 얻은 점수를 S라 하자. 다음 값을 생각한다.
P=S+i=1∑m2xi(xi−1)
크기가 x인 무더기를 크기 a,b인 두 무더기로 나누면 x=a+b이고 점수는 ab만큼 증가한다. 이때
2a(a−1)+2b(b−1)+ab=2(a+b)(a+b−1)=2x(x−1)
이므로 P는 연산 전후에 변하지 않는다.
처음에는 점수가 0이고 무더기가 하나뿐이므로 P=2N(N−1)이다. 게임이 끝나면 모든 무더기의 크기가 1이므로 합의 각 항이 0이 되고, 최종 점수는 반드시 2N(N−1)가 된다.
따라서 만들 수 있는 최종 점수는 정확히 하나이며, K=1과 2N(N−1)를 출력하면 된다. 계산 결과가 64비트 정수 범위를 넘을 수 있으므로 C++에서는 __int128과 같은 더 큰 정수형을 사용해야 한다.
시간 복잡도는 O(1)이고, 추가 공간 복잡도는 O(1)이다.
Solution written by GPT5.6