競技プログラミング雑記

 AtCoderが日本語だし……と競技プログラミングに初めて手を出して試しに問題を解いてみたのだけど、(簡単な問題は解けるのはいいとして)提出されているコードに「これ使えたら便利だなぁ」と思うものがあったのでメモ。ありがとうございます。これから解いて見る機会があったらこうして書くかも。基本的にはC#でやるつもりだけど、使えないところもあるのか、じゃあCでも書けるようにしておくべきかなぁ。


ReadLineで1文字ずつ処理

foreach (var x in Console.ReadLine()) { hoge(x) };

速度としては一回stringに押さえてからの方がいいんだろうか? 一緒か。


・int.Parse(string)の簡易版

Console.WriteLine('4' - '0' + 5); //print 9
Console.WriteLine('4' + 5); //print 57
Console.WriteLine('0' + 0); //print 48

そういえばそうだ。


・配列に格納された整数列の最大最小

using System.Linq;
int[] nums = new int[10];
//..//
Console.WriteLine(nums.Max()); //nums.Min()もある

ライブラリの有無で競技の結果が左右されるのっていいのか。必要な機能を導いてその機能をライブラリに持ってる言語を自由に選択できるのが優秀、ってのも理解はできるからいいか。つまりこのメソッドのおかげで「最大最小を求めるなら配列に格納してMaxMin使えば終わり」という話になる。Array.Sort(nums)でもいいのかもしれないけど、最大最小だけなら全ての並び替える必要はない。速度の観点からはこれは大事な要素になりそう。