[解決済み] 与えられた範囲にあるすべての数値のXORを求めよ
2022-10-24 13:56:30
質問
a'と'b'が1〜4,000,000,000の範囲にある大きな範囲[a,b]が与えられている。あなたは与えられた範囲内のすべての数値のXORを見つける必要があります。
この問題はTopCoder SRMで使用されました。私は試合で提出された解答の一つを見ましたが、どのように動作しているのかがわかりません。
どなたか優勝した解答を説明していただけませんか。
long long f(long long a) {
long long res[] = {a,1,a+1,0};
return res[a%4];
}
long long getXor(long long a, long long b) {
return f(b)^f(a-1);
}
ここで
getXor()
は渡された範囲[a,b]にあるすべての数値のxorを計算する実際の関数で、"f()"はヘルパー関数です。
どのように解決するのですか?
これはかなり巧妙な解決策です。実行中のXORに結果のパターンがあることを利用しています。これは
f()
関数は[0, a]から実行されるXORの合計を計算します。4 ビット数に対するこの表を見てください。
0000 <- 0 [a]
0001 <- 1 [1]
0010 <- 3 [a+1]
0011 <- 0 [0]
0100 <- 4 [a]
0101 <- 1 [1]
0110 <- 7 [a+1]
0111 <- 0 [0]
1000 <- 8 [a]
1001 <- 1 [1]
1010 <- 11 [a+1]
1011 <- 0 [0]
1100 <- 12 [a]
1101 <- 1 [1]
1110 <- 15 [a+1]
1111 <- 0 [0]
最初の列は2進数表現で、次に10進数の結果とXORリストのインデックス(a)との関係です。 これは、すべての上位ビットがキャンセルされ、下位2ビットが4ごとに循環するためです。このようにして、小さなルックアップテーブルができあがるわけです。
さて、[a,b]の一般的な範囲について考えてみましょう。この場合
f()
を使って [0,a-1] と [0,b] の XOR を求めます。自分自身とXORした値はすべて0になるので
f(a-1)
よりも小さい XOR ランの値をすべて打ち消すだけです。
a
よりも小さい値をすべてキャンセルし、範囲 [a,b] の XOR を残します。
関連
-
[解決済み】クイックソートとヒープソートの比較
-
[解決済み] 最小スパニングツリーは負の重みを恐れているのか?
-
[解決済み] T(n) = 2T(n/2) + O(n) からO(nlogn)を得る方法
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] リストのすべての並べ換えを生成するには?
-
[解決済み] 40 億の整数以外の整数を生成する。
-
[解決済み] nからk個の要素の組み合わせをすべて返すアルゴリズム
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
-
[解決済み】与えられた文字列のすべての並べ換えを生成する
-
[解決済み】与えられた和になるように数字の組み合わせの可能性を探す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] Octave : ロジスティック回帰 : fmincg と fminunc の違い
-
[解決済み] 2進数が3で割れているかどうかを知るには?
-
[解決済み] アルゴリズムの教科書では、ソートされた配列について「増加」ではなく「非減少」を使っているのはなぜですか?
-
[解決済み] 最小ボトルネックスパニングツリーと最小スパニングツリーはどう違うのですか?
-
[解決済み] ユダヤ人の足の爪を切る最適なアルゴリズムとは?
-
[解決済み] 任意の2頂点間の全接続を求めるグラフアルゴリズム
-
[解決済み] 検索語句の上位10位を見つけるアルゴリズム
-
[解決済み] ハングマンの難易度を「易しい」「中くらい」「難しい」に分類するためのアルゴリズム
-
[解決済み] ヒューリスティックとアルゴリズムの違いは何ですか?