私は、SPOJ.com Web サイトで 1 つの問題の解決策をコーディングしています。それはこれです: http://www.spoj.com/problems/MINMOVE/
私の解決策は、s+s のローリング ハッシュを作成することでした (s が入力からの完全な文字列の場合)。これにより、すべてのローテーションを取得できます。
コードは次のとおりです: https://github.com/vfonic/SPOJ/blob/master/minmove.cpp
私はローカルでテストしていましたが、私のコードは次の簡単なテストケースで失敗していました: aaba
3 ではなく 0 を出力していました (3 は、辞書編集的に最小の文字列 aaab を取得するための回転数です)。
printf(" "); を追加しました。行を h()関数の最初の行として、0 の代わりに正解を得ました: 3.
次に、printf 行を削除し、コードを SPOJ に送信しました。私の解決策は受け入れられました。ルームメイトのコンピューター (Ubuntu) でも同じコード (printf なし) をテストしたところ、彼は 3 を得ました。
最新の OS X Mountain Lion: 10.8.4 を使用しています。の出力は次のg++ --version
とおりです。
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
ダミーのprintfを追加するとコードが正しい答えを出力し、それ以外の場合は間違った答えを出力する理由は誰にもわかりますか?