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

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

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

뚜따와 알람시계

문제로 돌아가기

해설

어떤 선택의 OR 결과를 YYY라고 하자. 우리가 원하는 것은 Y≤MY \le MY≤M인 가능한 YYY 중 최댓값이다.

정수의 크기 비교를 이진수로 생각해 보자. Y≤MY \le MY≤M이 되려면 다음 중 하나이다.

  • Y=MY = MY=M.
  • 가장 높은 차이 나는 비트 bbb에서 MMM은 111, YYY는 00이고, 그보다 높은 비트들은 모두 같다.

두 번째 경우, bbb보다 낮은 비트들은 무엇이든 가능하다. 따라서 Y≤MY \le MY≤M인 모든 값 YYY는 다음 형태의 값 중 하나의 bitwise submask이다.

  • MMM.
  • MMM의 어떤 켜진 비트 bbb를 000으로 바꾸고, 그보다 낮은 비트들을 모두 111로 바꾼 값.

이러한 후보 mask를 BBB라고 하자. 어떤 선택의 OR 결과가 BBB의 submask가 되려면, 선택한 모든 AiA_iAi​ 역시 BBB의 submask여야 한다. 즉 다음 조건을 만족해야 한다.

(AiOR⁡B)=B(A_i \operatorname{OR} B) = B(Ai​ORB)=B

어떤 BBB에 대해 이 조건을 만족하는 AiA_iAi​들만 골라 OR하면, 결과는 여전히 BBB의 submask이므로 BBB 이하이고, 따라서 MMM 이하이다. 또한 OR 연산은 원소를 더 선택해도 값이 감소하지 않으므로, 고를 수 있는 들을 모두 고르는 것이 해당 안에서 최적이다.

따라서 모든 후보 mask BBB에 대해 다음 값을 계산한다.

⋁ (AiOR⁡B)=BAi\bigvee_{\,(A_i \operatorname{OR} B) = B} A_i(Ai​ORB)=B⋁​A

조건을 만족하는 AiA_iAi​가 하나 이상 있는 후보들 중 이 값의 최댓값이 정답이다. 어떤 후보에서도 하나 이상 고를 수 없다면 −1-1−1을 출력한다.

후보 mask의 수는 최대 606060개이고, 각 후보마다 NNN개의 수를 확인하므로 시간 복잡도는 O(60N)O(60N)O(60N)이다. 추가 메모리 사용량은 입력 배열을 제외하면 O(60)O(60)O(60)이다.

0
AiA_iAi​
BBB
i
​