DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Ddudda and Alarm Clocks

返回题目

题解

어떤 선택의 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
​