2017タイトル1における網易Youdaoプログラミングプッシュ

件名の説明:

シャッフルは、生活の中で非常に一般的であり、そして今シャッフルのプロセスをシミュレートするプログラムを作成する必要があります。今最初のものは、最初の2つのある上から下へ、2n個のカードを洗浄する必要がある、最初の3つは、シートを2nの最初でした。まず、我々は2つの山、第一シートを保持し、n番目(上半分のスタック)、右側に左側のN + 1〜2N-枚目(後半スタック)に、2Nのカードを置きます。そして、最後の一滴左手まで、左手の往復2枚目のカードの下、右から二番目のカードを置く、その後、最後のカード彼の左手を下に置く、その後、右の最後のカードまで、プロセスをシャッフル開始しました最初のカード。そして、その上のカードをマージします。例えば図6に示すように、カード、カードシーケンスは1、2、3、4、5、6の始まりです。右手4、5、6、最初の2つのグループ、左手、2、3に分けました。6を敷設するために、シャフリング処理において、3、5、2、4、1。これらの6枚のカードが再びカードのセットを合成した後、我々は上から下へ順に応じてカードのセットを見て、それは1、4、2、5、3、6のシーケンスとなります。オリジナルの後上部から配列が今カード群が与えられ、kはデッキ出力をシャッフル。

入力説明:
T(T≤100)の数の最初の行は、データセットの数を表します。各試験、2つの数の最初のラインN、K(1≤N、のために 100≤k)は、 次の行を2N番号A1、A2、...、A2N有する( 1≤AI≤1000000000)を。これは、上から下に、元のデッキの配列を表します。

説明出力:
各試験について、出力ライン、最終配列。数字ではなく、ライン出力、余分なスペースの端との間のスペースで区切られました。

例1入力:
3,311,234,563,212,345,622 1 1 1 1

出力例1:
1,425,361,543,261,111

説明:3は、それぞれ、3つのデータ群を表す1 3 3 4 5 6 1 2
3 2 3 2 1 4 5 6
2 2 1 1 1 1
各グループの最初の数のデータであるN個の第2のデータはバック、kとこれは、2n個のカードです


//後で実際には、ラインのラインデータ入力により、ピットに彼の例で見つかりました

問題解決のアイデア:

  オプション1:

    k番目の洗浄の規則に従ってシャッフル入力データ

  オプション2:

    入力データは、最終的な位置を決定する規則をシャッフルすることにより位置を洗浄k回、記憶されています

コードの実装:

  

1の#include <iostreamの>
 2の#include <ベクトル>
 3の#include < ストリング >
 4  使って 名前空間STDを、
5  
6  INT メイン()
 7  {
 8      int型の基です。
9      CIN >> 基;
10  
11      ベクター< INT > RES。
12      一方(group-- 13      {
 14          int型N、K。
15          CIN >> N >> K。
16  
17          // 方法一:
 18         // ベクトル<整数> V1、V2;
 19          // ベクトル<整数> VV(N-2 *)、
 20は         // のための(INT I = 0;私は<N-2 *、I ++の)
 21である         // {
 22は         / /     int型;
 23がある         //     CIN >>;
 24          //     IF(I <N-)
 25          //         v1.push_back(A); // 設定残さ
 26をされる         //     それ以外の
 27          //         v2.push_back(A) ; // 右のセット
 28          // }
 29          // 一方(K--)
 30          // {
 31である         //    (; NN <N * 2 ++ MM INT NN = 0、MM = 0)のための
 32          //     {
 33          //         VV [NN ++] = v1の[mm]で、
34          //         VV [NN ++] = V2とさ[mm];
35          //     }
 36          //     v1.assign(vv.begin()、vv.begin()+ N)。
37          //     v2.assign(vv.begin()+ N、vv.end())。
38          // }
 39  
40          // 方法二:
41          ベクトル< INT > VV(2 *のN)。
42          のint ;
43          のためにint型 I = 0 ; iが<2 * N。++ I)
 44          {
 45              CIN >> 46              int型 TMP = I + 1 47              のためにINT J = 0 ; J <K; ++ j)が
 48                  であれば(TMP <= N)
 49                      TMP = 2 * TMP - 1 50                  
51                      TMP = 2 *(TMP - N)。
52の              VV [TMP - 1 ] = 53          }
 54 
55          のための(自動B:VV)
 56              COUT << B << '  ' 57          coutの<< てendl;
58      }
 59      リターン 0 60  
61 }

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/10983882.html