DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

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
​