DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

귀가 장치

문제로 돌아가기

해설

bitwise OR 연산은 한 번 1이 된 비트를 다시 0으로 만들 수 없다. 따라서 AAA에서 이미 1인 비트는 BBB에서도 반드시 1이어야 한다. 즉, (A∣B)=B(A \mid B)=B(A∣B)=B가 필요하다.

또한 어떤 버튼 iii를 눌렀을 때 aia_iai​에 BBB에 없는 비트가 포함되어 있으면, 그 비트가 켜져서 최종적으로 BBB가 될 수 없다. 따라서 사용할 수 있는 버튼은 (ai∣B)=B(a_i \mid B)=B(ai​∣B)=B를 만족하는 버튼뿐이다.

이제 BBB에는 1이지만 AAA에는 0인 각 비트를 켜야 한다. 각 비트에 대해, 그 비트를 포함하면서 (ai∣B)=B(a_i \mid B)=B(ai​∣B)=B를 만족하는 버튼이 하나라도 있으면 그 버튼을 누르면 된다.

정수의 범위가 10910^9109 이하이므로 확인해야 할 비트는 30개 정도뿐이다. 각 버튼을 보면서 각 비트를 켤 수 있는 버튼 하나를 저장하면 O(nlog⁡109)O(n \log 10^9)O(nlog109)에 해결할 수 있다.

선택한 버튼 수는 필요한 비트 수 이하이므로 최대 30개이고, 따라서 100번 제한을 항상 만족한다.