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ではちゃんと点取るぞー