読者です 読者をやめる 読者になる 読者になる

ABC041 Rust練習編

http://abc041.contest.atcoder.jp/
用事で出れなかったので練習がてらRustで解きました。
A: 文字列のi番目の文字を出力するだけの問題。地味に苦戦しました…。
なんで.chars()だとうまくいかないんですかね。

B: 掛け算。これはかんたん。

C: C++ならペアをソートして終了!とやるのですがvectorにタプルを持たせられず苦戦。結局他の人のコードを見ました。
 マップ関数難しいです。

D: ある集合Sの要素iに対し、iが一番後ろに来れるか、でビットDP。
 遷移がよくわからんからとりあえずメモ化で書いて後で考えよう、というふうに解いたのですがこれは普通にループを回したほうが楽そうですね。
 Sの部分集合(を表す2進数)は必ずS(を表す2進数)より小さいので順番とか気にする必要ないですし。
 ネストが深くなるのが嫌でいちいちvecにSの要素をぶちこむ重そうな実装で書いたのですが意外と速くてびっくり。

 Rust、関数型っぽさ(というか、Ocamlっぽさ?)を出しつつも、その実徹底的にC++の弱点を改良するのが目的だったのでは?という感じでいい感じだししかも速いです。ジェネリックC++より使いやすそう。メモリ管理が一番の売りらしいですが。
 新しい言語なのに、めっちゃプロっぽいコードを書いてる人がAtCoderにけっこういて驚きます。僕もパターンや高階関数を使いこなしてスマートに書けるようにしたいですね。