본문 바로가기

알고리즘/Baekjoon

스프러그-그런디 [16895]

[1. 문제 설명]

https://www.acmicpc.net/problem/16895


[2. 풀이 접근]

최초 상태에서 필패하는지 먼저 확인 한다.

  • 필패 하면, 이기기 위해 첫턴에 할 수 있는 경우의 수는 존재하지 않는다.

이길 수 있는 상황이라면,

  • n 번째 돌무더기를 제외하고, 그런디 수를 계산한다.
  • n 번째 돌무더기에서, 위에서 계산한 그런디 수로 만들게 끔 돌을 가져갈 수 있는지 확인한다.
  • Value ^ Value = 0, 이므로 첫번째 턴에서 돌을 가져가서 전체 그러딘 수를 0으로 만들면,
  • 다음턴에 상대는 필패하게 된다.

하나이상 제거가 반드시 발생하기 때문에, 아무것도 하지 않는 경우는 발생할 수 없다.

그러나, 아무것도 하지 않는 경우는 이미 고려되었기 때문에,

  • if (v == 0) return 0;

아래 조건문에서 등호가 성립하는 경우는 발생하지 않는다. (등호를 생략해도 됨)

  • if (Pi[i] >= v) result++;

[3. 코드]

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

포함-배제의 원리. [16565]  (0) 2025.05.11
mo`s [13547]  (0) 2025.05.10
슬라이딩 윈도우. [12891]  (0) 2025.05.05
컨벡스 헐. [1708]  (0) 2025.01.02
네트워크 유량. [6086]  (0) 2024.12.26