ジム- 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_xijiのKは炎がヨセフスの問題を開始しましょう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 }