トピックリンク:http://acm.hdu.edu.cn/showproblem.php?pid=1276
件名の説明:
以下のように、水平方向のチームアップ注文番号とラインに従って始まる定期的なトレーニングから、新兵を訓練新入社員力のキューがある:スクラッチ二から一新聞の数、ラインのレポート2つのアウト、近くに残っている方向の数が少ないに移動しますそしてもう一度やり直す三から一ライン3のうちの報告すべてのレポートの数になり、小さな数に近い移動する方向の残りの部分は2つにスクラッチ1から新聞の数を続けます。。。ゼロから開始した後、これまでに3つ以下の人の残りの数まで報告された数3に報告1の数2に1を交互に。
入力
この問題は、テストデータセットを複数有し、第一のグループN挙動の数は、新兵N行の数ではなく、5000人の以上の新兵の数が続きます。
出力
N行の合計は、新兵の数入力に対応し、残りの出力の各ライン間のスペースは、元の番号、番号を動員があります。
サンプル入力
2
20
40
サンプル出力
1 7 19
1 19 37
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 CONST INT MAXN = 5500 。 4 INT メイン(){ 5 INT N、M。 6 CIN >> N。 7 一方(N-- ){ 8 CIN >> M。 9 のint = K 2 。 10 リスト< int型 > mylistという。 11 リスト< int型 > ::イテレータそれ。 12 のための(int型 I =1 ; I <= M; I ++ ) 13 mylist.push_back(I)。 14 一方(mylist.size()> 3 ){ 15 INT NUM = 1 。 16 のために(それは(mylist.begin =)を、それ=!mylist.end()){ 17 場合(NUM ++%K == 0 ) 18 が= mylist.erase(それを)。 19 他 20 それを++ ; 21 } 22 K == 2?K = 3:K = 2 。 23 } 24 のためには、(それがmylist.beginを()=;それ= mylist.end();!それ++ ){ 25 であれば(それ=!mylist.begin()) 26 COUT << " " 。 27 coutの<< * それ。 28 } 29 COUT << ENDL。 30 } 31 リターン 0 。 32 }