ポールが示唆するように、1 から 100 までの各数値の出現回数の頻度カウントから始めます。これにより、長さ 100 の配列 freq[] が生成されます。
次に、その配列からトリプル A、B、C をループして条件 A^B^C=0 をテストする代わりに、A < B のペア A、B をループします。各 A、B について、C=A^B を計算します。 (今は A^B^C=0)、A < B < C < 100 であることを確認してください。現在の合計は次のようになります。
Sum+=freq[A]*freq[B]*freq[C]
作業は、頻度カウントの O(n) と、A < B のループの約 5000 です。
3 つの異なる数値 A、B、C のすべてのトリプルは何らかの順序で発生する必要があるため、このような各トリプルは 1 回だけ検出されます。次に、2 つの数が等しいトリプルを探す必要があります。しかし、2 つの数値が等しく、そのうちの 3 つの xor が 0 の場合、3 番目の数値はゼロでなければなりません。したがって、これは、(A=0、B=C < 100) の出現をカウントして、頻度カウント配列に対する B の 2 次線形検索になります。(このケースには非常に注意してください。B=0 のケースには特に注意してください。カウントは、単に freq[B] ** 2 または freq[0] ** 3 ではありません。そこには、組み合わせ論の問題が少し隠れています。)
お役に立てれば!