atcoder#ABC291G. [ABC291G] OR Sum
[ABC291G] OR Sum
配点 : 点
問題文
長さ の数列 と が与えられます。 また、高橋君は数列 に対して、次の操作を好きな回数 ( 回でもよい) 行う事ができます。
- を つ左にシフトする、すなわち、 を、 で定義される で置き換える。ただし、 で、 を で割った余りを表す。
高橋君の目的は を最大化することです。ただし、 で と のビット毎の論理和(bitwise OR)を表します。
の値としてあり得る最大の値を求めてください。
ビット毎の論理和(bitwise OR)とは
1 ビットの数字 (0 または 1) の組に対して下の表で定義される演算を論理和(またはOR演算)といいます。ビット毎に論理和を適用する演算をビット毎の論理和(bitwise OR)といいます。
x | y | x|y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
論理和ではビット x, y の少なくとも一方が 1 の場合に結果が 1 となります。 逆に言うと、共に 0 の場合のみ結果が 0 となります。
具体例
0110 | 0101 = 0111
制約
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
の値としてあり得る最大の値を出力せよ。
3
0 1 3
0 2 3
8
高橋君が一度も操作を行わなかった時、 は のままであり、$\displaystyle\sum_{i=0}^{N-1} (A_i|B_i)=(0|0)+(1|2)+(3|3)=0+3+3=6$, 高橋君が 回操作を行った時、 となり、$\displaystyle\sum_{i=0}^{N-1} (A_i|B_i)=(1|0)+(3|2)+(0|3)=1+3+3=7$, 高橋君が 回操作を行った時、 となり、$\displaystyle\sum_{i=0}^{N-1} (A_i|B_i)=(3|0)+(0|2)+(1|3)=3+2+3=8$ となります。 回以上操作を行った時、 は上記のいずれかの形になるため、 の最大値は であり、 を出力します。
5
1 6 1 4 3
0 6 4 0 1
23
最大となるのは高橋君が 回操作を行った時であり、この時 となり、 $\displaystyle\sum_{i=0}^{N-1} (A_i|B_i)=(4|0)+(3|6)+(1|4)+(6|0)+(1|1)=4+7+5+6+1=23$ となります。