最近私はオンラインジャッジの質問を解決し始めました。 Iは、this question in SPOJで立ち往生しています:ここSPOJ:カードシャッフル
はNカードをシャッフルするためのアルゴリズムである:
- カードは、KがN
- の係数であるK等しい杭、ボトムNに分割され/ Kカードは同じ順番でパイル1に属します(最初のパイルのボトムカードはパイル1のボトムカードです)。
- 下のN/Kカードはパイル2に属します。
- シャッフルされたパイルの一番上のカードがパイル1の一番上のカードです。次のカードはパイル2の一番上のカードです。シャッフルされたパイルのKthカードはパイルKの一番上のカードです。 (K + 1)番目のカードは現在パイル1の最上部にあるカードであり、(K + 2)番目はパイル2の最上部にあるカードなどである。
たとえば、N = 6でK = 3の場合、シャッフルされたカードABCDEF(上から下)のデッキは「ECAFDB」に変更されます。
NとKを指定すると、パイルが元の順序に復元されるまでに必要な最小シャッフル数はどれくらいですか?
私がシミュレートしようとしたが、それは時間制限を超えています。何か数学的方程式はありますか?
x =(x%K)*(N/K)+(Nx)/K-1 .... ここでxは0から始まります.... 何か良いですか? – vastutsav
私はあなたのアイデアを得るのか分からない。答えは私の記事で説明されているチェーンの長さからの直接的な公式です。 –
私たちは値x = 0で始まります...上記の式を使って再帰的にx番目のカードの新しい位置を得ます....カードが0の位置に戻ったら、オリジナルの設定...プロセス全体で必要な反復回数を数えるか、次のステップのテーブルを維持することができます。より良いアプローチはありますか?任意のグループ理論のもの? – vastutsav