Wannaflyチャレンジ15 C「チーム」(問題のヨセフスの一種)

ポータル

 

参考資料

  [1]:

  [2]:忘れ

  [3]:マイCSDN

問題の意味

  パーソナル円n、パケット2の数、回数Xデキューの数を見つけ、メッセージを残します。

•ボーエンの理解[1]

  最初のラウンドは、xが奇数である場合、xは、チームの最初のラウンドである必要があり、特定の奇数をデキューANS =(X + 1)/ 2。

  xが奇数でない場合は、次のように処理が行われます。

1つの 一方(のx%2 == 0 2  {
 3      X / = 2 4      もし(N - 1 5          X ++ 6つの      ANS + = N / 2 7      N - = N / 2 8 }

  以下は、コードの動作を説明します。

  ①xが偶数であれば、最初のラウンドでのチームではなく、さらに、Xおよびチーム、X / 2の番号の合計の前に、

  ②nが偶数の場合、CPCの最初のラウンドは、n / 2個を残して、N / 2個デキューデキュー、xはX / 2の番号の残りの数字です。

  第二ラウンドでチーム、残りのn / 2①②に対応する最初の数は、上記処理を繰り返す番号依然としてデキューの残りの数;

  nが奇数の場合、CPCのデキューの最初のラウンドは、n / 2個を残して、N / 2 + 1が番号付けされデキュー。

  しかし、第二ラウンドでは、この残りのn / 2番のチーム、最初のチームIDは、もはや上記プロセス②異なる第一の数、第二の数はなく、されていません。

  これは、どのように処理することができますか?

  非常に良いチームの最初のラウンドで実行し、そのチームの最後の数nはチームの最初のチームの位置の第二ラウンドに、そしてチームの番号の第二ラウンドは、最初は外にまだあります最初の数です。

  上記の手順を繰り返す①②続いて、前+1に基づいて変形の残りの数です。

•コード

1の#include <ビット/ STDC ++ H.>
 2  使用して 名前空間STD;
 3  の#define LL長いロング
 。4  
。5  LLのN-、X;
 6  int型Q;
 7  
。8  LL(解決)
 9  {
 10      LL ANS = 0 ;
 11      LL = CUR N-;
 12は     、一方(X%2 == 0 13は     、{
 14          、X / = 2 ; /// コンセンサス前X X / 2は、番号
15          IF(&CUR 1///電流が奇数残りの場合は、次のデキューとして最後番号
16              X ++ ;
 17の          ANS + = CUR / 2 ;
 18は、          CUR - = CUR / 2 ;
 19      }
 20      ANS + =(Xの+ 1 /)2 21は     戻りANSを、
 22である }
 23れる INT ()は、メイン
 24  {
 25      scanfの(" %Dの%のLLD "、およびN-、&Q);
 26は、     一方(Q - 27      {
 28          scanfの(" %のLLD "、&x)は、
29          のprintf(" %LLDする\ n " 、解決())。
30      }
 31      リターン 0 32 }
コードの表示

•ボーエンの理解[2]の

  

  Dapperのコード、TQL!

  xが奇数でない場合、xは間違いなくこのラウンドではチームではなく、X-偶数チームのこのラウンドではなくなった前。

  それは、次に、X / 2 n個の尾部に番号に対応する増加、xは尾数となり、デキューに番号付けされていないX / 2です。

  以上の処理が実行されます。

•コード

1の#include <ビット/ STDC ++ H.>
 2  使用して 名前空間STD;
 3  の#define LL長いロング
 。4  
。5  LLのN-、X;
 6  int型Q;
 7  
。8  LL(解決)
 9。 {
 10      ながら(Xの%2 == 0 11          X + = N-X / 2 ; /// X / 2尾に追加番号、尾数xとなり、xは最初のラウンドでチームかどうかを判定することができる
12は     戻り X / 2 + 1。;
 13であります }
 14  のint main()の
 15  {
 16     scanf関数(" %のLLD%dの"、&​​N、&Q)。
17      一方(q-- 18      {
 19          のscanf(" %のLLD "、&x)は、
20          のprintf(" %LLDする\ n " 、解決())。
21      }
 22      リターン 0 23 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/violet-acmer/p/11111440.html