C - Ants on a Circle

atcoder.jp

 

 

700点問題2問目も解説ACでした…

 

蟻本の由来になったとか?

典型なんでしょうか。全くわからなかったです。

 

 

 

問題:周の長さLの円にN匹の蟻がいる。蟻は単位時間に1進み、時計回り化反時計回りか最初に決まっている。蟻同士が出会うと2匹とも反転して進む向きを変える。時間Tが立った後それぞれの蟻はどこにいるか

 

 

解説:

まず弾性衝突と呼ぶらしいです。

確かに物質見ればそうですね。

 

弾性衝突では、お互いが入れ替わるとして考えてよいらしいので、N匹の蟻の位置はわかります。

 

このままではどの蟻がはじめどの番号だったかわかりません。

蟻の番号は入れ替わらないので、1~nの昇順で並んでいます。

ぶつかったとき、時計回りの蟻は番号が1増えて、反時計回りの蟻は番号が1減るとすればよいです。

 

1匹について愚直にシミュレートすると、1匹の位置からすべての蟻の番号が定まり解けました。

 

もし同じ座標に2匹いる状態なら、時計回りのほうが小さい番号、反時計回りのほうが大きい番号になるのでそうしましょう。

 

 

感想:

まず弾性衝突でのコツを知りませんでした。

そして、番号を求めるところでは結果だけ注目するという感じでしょうか。

 

弾性衝突ということを知ったあとは自力で解きたかったですね。

ぶつかる回数で番号の遷移がわかること、O(1)でぶつかる回数がわかることがポイントでした。

 

考察厳しいです。同じような考察できるようになる気がしません。

 

実装もまあまあ重めだったのでそのうちやり直そうと思います