문제 링크
- http://icpc.me/17419
문제 출처
- 2019 선린 정올 1번
풀이
- 컴퓨터에서 음수를 저장할 때는 절댓값의 2의 보수를 저장합니다.
- 2의 보수를 만드는 것은 모든 비트를 반전시킨 뒤 1을 더하면 됩니다.
그러므로 (~K) + 1은 -K입니다.
식을 다시 쓰면 K = K - (K & -K) 가 됩니다.
Fenwick Tree를 알고 있는 사람이라면 K & -K 가 무엇을 의미하는지 바로 알 수 있습니다.
이진수에서 가장 뒤에 있는 1의 위치를 알아냅니다.
결국 문제에 주어진 식은 맨 뒤에 있는 1의 위치를 알아낸 후, 그 비트를 0으로 바꾸는 연산입니다.
비트열에서 1의 개수가 정답이 됩니다.
전체 코드
1 |
|