Codeforces Round #373 (Div. 1) A. Efim and Strange Grade
A 問題に面倒な実装を持ってくるのやめて欲しい…。
http://codeforces.com/contest/718/problem/A
問題概要
小数点以下のすきな場所で四捨五入するという操作を t 回まで行えるので、操作によって得られる最大の値を求めよ。
解法
いくつか注意点。
- 入力の小数点はかならずあることが保証されている。
- 整数部は四捨五入はできない。
- 答えが整数になる場合は小数点を出力しない。
- 入力の末尾は 0 でないことが保証されている。
なるべく上位の桁を大きくしたいので、左から右に見ていって 5 以上の値が見つかったらそれを四捨五入すればいい。
たどえば 1.145678 だったら 5 を四捨五入する。1.15 になるのでもう一回四捨五入する。1.2 になるが、これ以上四捨五入する必要はないので操作を終了する。
とまあ解法は単純だが、実装はなかなか面倒。
注意したいケースは 0.5, 5.5, 999.9 とか。
自分はインクリメントした後の正規化関数を頑張って作って、それをメインのコードで使った。バグらせずに書くのはなかなか難しい…。
小数点の文字列処理、最近いくつか出題されてたけど面倒なだけなのでやめて欲しい…。