CSP 201712から2試合(ヨセフス)

問題の説明
  あり nは ゲームをプレイ番目の円の子供、1からの子ども のn 数の第2号子供に時計回りに座って1人の子供、子供たちは時計回りの数に座って3人の子供2、......、第1の子供私は座って n個の 子の数の時計回りの方向を。
  それぞれの子の数に続いてゲームを開始し、報告された子の第1の数から時計回りには、1によって報告された子供の数を報告しています。子供用のパケットの数ならば k個の 数または最後の倍数(すなわち、ビット数)である K 、次に子供が解消され、後続のパケットの数はもはや参加しません。ときにゲームが唯一の子供、子供が勝ち。
  例えば、N = 5、K = 2:
  子供の1個は、1報告、
  子供パケット2うちの2数、
  3つの子供パケット3を有する
  4アウトを有する4人の子供パケット、
  5を有する5つの子供のパケットを、
  1第6号は、外子の数を報告した;
  3、子供の数が7を報告し、
  8のうちランク5は、子供の数と報告し
  3号子供が勝ちます。
  与えられた N K 、最後の数はどのくらいです勝つために子供を頼みますか?
入力形式
  2つの整数を含む入力ライン、 N 及び K 被験者を意味します。
出力フォーマット
  子どもの当選番号を表す整数を含む出力1行。
サンプル入力
5 2
サンプル出力
3
サンプル入力
7 3
サンプル出力
4
スケールデータと規則
  評価のためのすべてのユースケース,. 1≤  N-  ≤1000,1≤  K  ≤。9。
1の#include <iostreamの>
 2の#include <ベクトル>
 3  使用して 名前空間STDを、
4  INT メイン(){
 5      int型N、K。
6      CIN >> N >> K。
7      ベクター< INT > pre_queue。
8      のためには、int型 i = 1 ; iが<= N; iが++ ){
 9          pre_queue.push_back(I)。
10      }
 11      INTの順序= 0 12      int型 TOT = N。
13      もし(K ==1 ){    
 14          COUT << N。
15          リターン 0 ;
16      }
 17      ながら(TOT> 1 ){
 18          のための(自動&I:pre_queue){
 19              であれば(!I = - 1 20                  順++ 21              
22                  続けます23              であれば(順%kは== 0 ||注文%10 == K){
 24                  iは= - 1 25                 tot-- ;
26                  
27              }
 28          }
 29      }
 30      のためのint型 I = 0 ; iがpre_queue.sizeを()<; Iは++ ){
 31          // COUT << pre_queue [I] << ENDL。
32          であれば(pre_queue [I] =! - 1 ){
 33              COUT << pre_queue [I]。
34              ブレーク;
35          }
 36      }
 37      リターン 0 38 }

最後の値で見納めになるまで、-1に設定されていない場合ではない-1、k個の== 1は、別途議論している場合

おすすめ

転載: www.cnblogs.com/Jovesun/p/11488994.html