Problem
0~n-1まで探索。i+1番目-i番目がDより小さければi+1番目の数値を出力してreturn。最後に-1を出力する。余談だが、この当てはまらなければ-1を出力する、といった類の問題は今までならば結果を出力したかどうかをジャッジするためのbool型変数を作っていたがRustだとreturnでプログラムを終了させることができるためよりシンプルに記述できることが身についてきている。
A:submission
Problem
効率的な方法が思いつかず、かなり冗長な処理になった。(usize,usize)でBが出たindexとRが出たindexを管理した。また、BとRが出た回数をusizeでもち...といった具合に、大量の変数を散らかしてしまった。実装方法はそのままだが一つ記述するとするならBが出たindexの偶奇の不一致をどう判定するかで、着目したのは(偶数-偶数)も(奇数-奇数)も偶数になる、という性質だった。これにより、(B1-B0)が奇数なら偶奇が不一致、ということになるため少し短くなる。
B:submission
B:submission(CodeGolf)
Problem
引っかけかと思うほど簡単だった。ABC297_A,ABC296_Aと同様に各文字列のi番目とi+1番目がTの時にi番目をP,i+1番目をCに置き換える。そのため文字列の集合ばmutableで受け取るようにする。この操作を全ての文字列に対して行うことで対応できる。あとは改行に気をつけて1文字ずつ出力する。各文字列に対して.replace("TT","PC")すればよかっただけだな、とも。後述するD問題を解き終えたあと、暇だったのでsedでコードゴルフしていたところshortestタイがとれた。
C:submission
C:submission(CodeGolf)
Problem
効率のいい解き方が思いつかなかったため、書いてあることをそのまま実装した結果26個中8個がTLE。18個は通っているため割とすぐ行けるだろうと判断したため改良した結果ACした。まずA,B(便宜上、ここでは大きい方をA,小さい方をBとする。)において、A mod Bが0かどうかをみる。0でない時、A/Bした結果にBをかけた数を引く。A/Bは操作を連続で行うことができる回数を示していると言えるため、操作を行った回数を記録するcntにまとめてA/Bを足す。A mod Bが0の時は(A/B)-1をBにかけてAから引く。この時AとBは等しくなっているためここで操作は終わる。計算量はおそらくO(1)に近い?
D:submission