atcoder#ABC291G. [ABC291G] OR Sum

[ABC291G] OR Sum

题目描述

長さ N N の数列 A=(A0,A1,,AN1) A=(A_0,A_1,\ldots,A_{N-1}) B=(B0,B1,,BN1) B=(B_0,B_1,\ldots,B_{N-1}) が与えられます。
また、高橋君は数列 A A に対して、次の操作を好きな回数 ( 0 0 回でもよい) 行う事ができます。

  • A A 1 1 つ左にシフトする、すなわち、A A を、Ai=A(i+1)% N A'_i=A_{(i+1)\%\ N} で定義される A A' で置き換える。ただし、x% N x\%\ N で、x x N N で割った余りを表す。

高橋君の目的は i=0N1 (AiBi) \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i) を最大化することです。ただし、xy x|y x x y y のビット毎の論理和(bitwise OR)を表します。

i=0N1 (AiBi) \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i) の値としてあり得る最大の値を求めてください。

ビット毎の論理和(bitwise OR)とは 1 1 ビットの数字 (0 0 または 1 1 ) の組に対して下の表で定義される演算を論理和(またはOR演算)といいます。
ビット毎に論理和を適用する演算を**ビット毎の論理和(bitwise OR)**といいます。 x x y y xy x|y 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 論理和ではビット x x , y y の少なくとも一方が 1 1 の場合に結果が 1 1 となります。 逆に言うと、共に 0 0 の場合のみ結果が 0 0 となります。

具体例
0110 | 0101 = 0111

输入格式

入力は以下の形式で標準入力から与えられる。

N N A0 A_0 A1 A_1 \ldots AN1 A_{N-1} B0 B_0 B1 B_1 \ldots BN1 B_{N-1}

输出格式

i=0N1 (AiBi) \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i) の値としてあり得る最大の値を出力せよ。

题目大意

给定两个长为 nn 的序列 AiA_iBiB_i,循环移位 AiA_i 使得 i=0N1 (AiBi) \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i) 最大。

2n1052 \le n \le 10^5

0Ai,Bi310 \le A_i,B_i \le 31

3
0 1 3
0 2 3
8
5
1 6 1 4 3
0 6 4 0 1
23

提示

制約

  • 2  N  5× 105 2\ \leq\ N\ \leq\ 5\times\ 10^5
  • 0 Ai,Bi  31 0\leq\ A_i,B_i\ \leq\ 31
  • 入力はすべて整数

Sample Explanation 1

高橋君が一度も操作を行わなかった時、A A (0,1,3) (0,1,3) のままであり、$ \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i)=(0|0)+(1|2)+(3|3)=0+3+3=6 $, 高橋君が 1 1 回操作を行った時、A=(1,3,0) A=(1,3,0) となり、$ \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i)=(1|0)+(3|2)+(0|3)=1+3+3=7 $, 高橋君が 2 2 回操作を行った時、A=(3,0,1) A=(3,0,1) となり、$ \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i)=(3|0)+(0|2)+(1|3)=3+2+3=8 $ となります。3 3 回以上操作を行った時、 A A は上記のいずれかの形になるため、i=0N1 (AiBi) \displaystyle\sum_{i=0}^{N-1}\ (A_i|B_i) の最大値は 8 8 であり、8 8 を出力します。

Sample Explanation 2

最大となるのは高橋君が 3 3 回操作を行った時であり、この時 A=(4,3,1,6,1) A=(4,3,1,6,1) となり、 $ \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 $ となります。