SRM144-151のDIV2 Easyを解いてみた

参戦するからには最低毎回Easyは正解できないといかんと思い、ひたすら解いてみた。
改めて技量と英語力の無さを痛感しつつ、思ったことや使えそうなことを書いておく。

問題を開いたらとりあえず全文翻訳エンジンへ

下手に読もうとするより日本語で読める分、時間のロスが少ない気がする。
ただ、やりすぎると原文を読むのを放棄しそうなので、原文にも挑んでみること。
書き残しておくこともないような気がするけど、これからやれ的な意味で。

読みにくくしてみる?

時間があったら読みにくくしておくと、チャレンジフェイズを回避できるかも。
誰かに50点あげるくらいなら、システムテストでエラーのがマシだと思うんだ。
エラーの無いコードを書くのが一番いいですね。ハイ。

数値の下n桁を切り出す

int i = 123456789;
int j = i % 100;
i /= 100;

剰余を使って、これだと下2桁の切り出しができる。
下n桁を切り出したら、切り出した分を詰めておくのを忘れない。
言われてみればそりゃそうだと思ったけど、使える時に気が付かなかったからメモメモ。

数値と文字を比較する

int i = 0;
string st("0");

printf("%d",(i == st));        //0
printf("%d",((i+'0') == st));  //1

1桁の数値限定で文字の'0'を足してやれば文字との比較もできる。
ASCIIコードの順番的に1-9に文字の'0'(数値は48)を足すと文字の1-9になるから。
2桁の数値に同じことをして、システムテストでエラーが出たのは良い思い出。
2桁以上の場合で文字列と比較したいなら、ostringstreamでstringにしてからにすること。
これもどこかで見て、勉強もしたんだろうけど使えなかった。これも忘れないように。


とりあえずこんな感じかな。
日曜日から今日まで挑んで、やっとこさここまでなのだからまだまだ駄目っぷり全開である。
Easyで最高110点くらいしか取れてないし。
これからは他のEasyと、やり残したMediumもやってみよう。
次のSRMではちゃんと点取るぞー