https://www.acmicpc.net/problem/18222
문제에서는 숫자를 1부터 세지만 우리는 편의상 숫자를 0부터 세도록 하자.
임의의 자연수 n에 대해, n의 2진수 표현에서 비트 값을 (아무 위치에서나) 1만큼 바꿔 준 수 m을 고려하자.
그러면 n번째 투에-모스 문자열과 m번째 투에-모스 문자열 값은 그 parity가 반대임을 알 수 있다.
따라서 n의 2진수 표현의 비트 수를 세 준 뒤 2로 나눈 나머지를 출력하기만 하면 된다.
#include <bits/stdc++.h>
int main() {
long long n; std::cin >> n;
std::cout << std::bitset<64>(--n).count() % 2 << std::endl;
}
'Computer Science > PS' 카테고리의 다른 글
[백준 5615] 아파트 임대 (Feat. 밀러-라빈 소수 판정법) (Platinum I) (0) | 2022.08.28 |
---|---|
[백준 9206] 나무 말고 꽃 (Platinum II) (0) | 2022.08.26 |
[백준 25323] 수 정렬하기, 근데 이제 제곱수를 곁들인 [UCPC 2022 예선] (Platinum V) (0) | 2022.08.20 |
[백준 1168] 요세푸스 문제 2 (Platinum III) (Feat. PBDS) - 세그먼트 트리 없이 풀기 (0) | 2022.08.17 |
[백준 18542] Permutant (Ruby III) 풀이 (0) | 2022.08.04 |
댓글