2

この問題の解き方がわかりません >>

整数の配列が与えられた場合、その配列を次のように 2 つの部分に分割する必要があります。

1) 1 番目のセットの xor が 2 番目のセットの xor と等しい

2) 2 つの部分の要素の合計の差が最大です。

例えば:

指定された配列が [4,2,6] の場合

[2]、[4,6]、

          where xor(2) = 010
                xor(4,6) = 100^110 = 010 = xor(2)

2 つの部分の合計の差 = (4+6)-2 = 8 (上記の制約を満たす可能な最大の差)。

(2 番目の制約がない場合は、配列を合計が等しい部分に分割するだけで十分です)。

4

1 に答える 1

10

これはひっかけ問題です。

整数 a1...an があり、XOR が等しくなるようにそれらを 2 つの部分に分割できる場合、これは a1 xor a2 xor ... xor an がゼロに等しいことを意味します。それが成り立つとき、例えば (a1) xor (a2 xor a3 xor ... xor an) == 0 のように、任意のパーティションが機能するので、a1 == a2 xor ... xor an である必要があります。したがって、任意のパーティションが機能します。それを考えると、許可されている場合は空のパーティションと完全なパーティションを選択するか、最小の整数をシングルトンパーティションに入れ、他のすべてを2番目のパーティションに入れます。

于 2013-08-22T10:55:13.883 に答える