Skip to content
ik-fib's page
Go back

AtCoder Beginner Contest (ABC) #025 参加記

久しぶりにABC #025参加しました。 公式解説があるので説明は最小限です。

就職してから、競プロご無沙汰だったので、リハビリのつもりでやっていたのですが、どうやら難易度高めだったらしく後半で詰まってしまいました。 しかも、若干寝不足気味とかでボロボロに… https://twitter.com/ik11235/status/614796191486750720

A - 25個の文字列

問題概要

与えられた5つのアルファベットから作成できる2文字の文字列を辞書順に並べた時にn番目にくる文字列を出力する。

解法

5つのアルファベットはソート済みなので、先頭から文字を利用していき、n回目の文字列が答えです。 コード上は、ループで添字を探索していますが、より正確にはループで探索する必要もなく 文字数は固定なので、s[(n-1)/5]s[(n-1)%5]だけで出力できます。 (この辺りの発想がすぐ出なくなってるあたりが、競プロ離れてしまって弱くなった感がしました)

コード

ループなくした方

B - 双子とスイカ割り

問題概要

東西にdiメートル動くクエリが与えられる。全てのクエリーを行った時の立ち位置を出力せよ。 ただし、A <= di <=B でない時、A,Bの近い方に合わせる。

解法

動くのは東西2方向だけなので、一方への移動を負の値とすれば簡単になります。 diの制限も難しいことはなくdiB の時di=Bとしてクエリを処理すれば問題ありません。

コード

C - 双子と○×ゲーム

問題概要

3x3の○×ゲームを行う。各マスの得点は、隣り合うマスと○×が同じ時直大くんに、違う時直子さんに得点が入る。 各マスの得点が与えられて、各々が点数を最大にするようにゲームをした時の、それぞれの点数を出力せよ。

解法

ここから本番中に解けませんでした。

マスの点数は必ずどちらかに入るので、直大くんの点数+直子さんの点数は必ず一定になります。 なので、再帰で直大くんのスコアを元に評価を行い、直大くんの手番は最大の値を、直子さんの時は最小の値を返り値をすれば解けるようです。

D - 25個の整数

問題概要

Cで詰まったので問題読めませんでした。

久しぶりにやってみようと思ったら、ちょうどABCがあったのでちょうどいいタイミングだと思ってやったら、ボロボロでした。難易度高めだったのもありましたが、ARC相当だったとしても前はC行ける時もあったので、C解けなかったのは結構悔しかったです。やっぱり定期的に解かないとすぐ忘れてしまうので、Atcoderの過去問かAOJあたり解こうかなと思います…


Share this post:

Previous Post
Lenovo Miix 2 8をwindows 10 にアップグレードしてみた
Next Post
TopCoder SRM 658 Div2 参加記