/ 最近 .rdf 追記 編集 設定 本棚

log[20201222] パナソニックプログラミングコンテAtCoder Beginner Contest 186E 問題 Throne



20201222()

最終更: 2020-12-23T00:48+0900

[AtCoder] パナソニックプログラミングコンテAtCoder Beginner Contest 186E 問題 Throne

まだ AC をもらっていないしそれどころかひとつの提出もできていないけど外堀が埋まってきた気がするので経過を書く

 シミュレーションした(未提)

gets
puts$<.map{|ln|
	n,s,k = ln.split.map(&:to_i)
	ss = {0=>m=0}
	until ss[s]
		ss[s] = s
		m -= (s-n)/k
		s += (s-n)/k*-k
		s %= n
	end
	next s == 0 ? m : -1
}

これはサンプルの4つのケースのうち3番目を除いて正しい答えを出す。3番目の 998244353 897581057 595591169 にもたぶん正しい答えを返すだろうけど答えがおよそ 250 メガなので数分単位の時間がかかるはず。

NSK の3つの数字があるけどNK が近接していてしかもべらぼうに値が大きいープ1回のイテレーションで全周 N のうち1点だけをテトするのでは最悪 N 回繰り返す。N の上限は1ギガだ

 たとえば K = N-1 の場合

1回のイテレーションで S-1 の地点に移動するS 回のイテレーションで玉座に移動することが即座に理解できるがスクリトにそれは反映されていない

 たとえば NK が偶数で S が奇数の場合

K が2より大きければ(N との関係にもよるが)すべての偶数地点を網羅できるとは限らないがK が最小の偶数2であってもスタト地点 S から奇数席離れた玉座に移動できないことはすぐにわかるこれもスクリトに反映されていない

 それで?

NKS の関係をどういう式で表すのかなあLCM だか GCD だかのキーワドは目に入ってるんだけど


K = N%K という風に再帰的に K を更新していくと最後は 0 に落ち着くK0 になるまでに S をどうにかしたものが K で割り切れれば答えは N/K の倍数±α になりそうなんだけどS をどうするのかN-S をどうにかするのかよくわからない