ジム - 101955Kは炎がヨセフスヨセフスの問題(ほとんどの数学的な解決策を)始めてみましょう

ジム- 101955Kは 炎を開始しましょう 

彼らは知ってもらったのか、真実を伝えるために、直接2つのブログにリンクされています。

ボート_Xiaofeiジョセフ問題(ヨセフスの問題)3:列のうち最後でした

 ボート_Xiaofeiジョセフ問題(ヨセフスの問題)4:人のk番目の行

 リンジー-夢ヨセフスの問題(ほとんどの数学的な解決策)

だから本当に再び理解し、アイデアをなで、今直接プロセスについて話します。

ヨセフスのトピックは、個々の巻き数nは、レポートのk列、および新聞から再起動したことを報告し、その後、列kを報告しています。

最後の列は、設定ANS = 0される人を見つける、及び(iは1 = int型、iが<= N; iが++)は%ANS =(ANS + K)、最終的に+ 1 ANS

ANS =(ANS + m番目デキュー人のために、Mが設けられて= N 1-M ANS =(K-1)%のM(iは++; iがn = <iがm + 1 = INT)+ K)私は、最終的には+ 1%ANS

N、M、Kが大きいが、ときに問題となっている場合である分(M、K)はかなり時間が、考えとジャンプ間隔が乗算に合わせいくつかのモジュロ加算器なしに、置きます。

csu_xijiKは炎がヨセフスの問題を開始しましょうgym101955 codeforces

1の#include <cstdioを>
 2のtypedef 長い LL。
3  INT メイン(){
 4      int型の T = 1 、T。
5      LL N、M、K。
6      のscanf(" %dの"、&T)。
7      一方、(T <= T){
 8          のscanf(" %LLD%LLD%LLD "、&​​N、&M、およびK);
9つの         LLのANS、D、P。
10          であれば(k個の== 1)ANS = M- 1 11          {
 12             M = N + 1 - M。
13の              ANS =(K- 1)%のM。
14              であれば、(N + 1 -m <= K){
 15                  、P = M + 1 16                  一方(p <= N){
 17件                      のANS =(ANS + K)%のP。
18                      のp ++ ;
19                  }
 20              } {
 21                  、P = M。
22                  一方){
 23                     D =(P-ANS)/(K- 1 )。
24                      であれば(D×(K 1)==(P-ANS))d-- 25                      であれば、D = NP(D> NP) 26                      P + = D。
27の                      ANS + D * = K。
28                      もし(P == N)ブレーク29                      のp ++ ;
30                      のANS =(ANS + K)%のP。
31                      もし(P == N)ブレーク32                  }
 33              }
 34          }
 35         printf(" ケース#%dを:%LLDの\ nを"、T ++、ANS + 1 );
36      }
 37      リターン 0 38 }
問題を行うには、問題解決の方法

おすすめ

転載: www.cnblogs.com/LMCC1108/p/11685032.html