Code Jam の練習に……と思ってしばらく前から TopCoder のSRMに参加してたのですが、 せっかくなので cafelier@SRM に記録をつけることにしました。 どういう試行錯誤をしながら提出した時のコードにいたったのかを、 できるだけ詳細にメモろうと思っています。 426以前のは記憶から掘り起こして書いたのでちょい大ざっぱですが。
これまで何回かここで書いたような整然とした考え方を本当に自分がしているかいうと、 してないよなー、と薄々思ってしまっているので、じゃあどういう風にやっているんだろうかと。 自分のふり見て我がふり直す。
a^2 + b^2 = c^2
を満たす自然数を列挙する方法って
a=m^2-n^2, b=2mn, c=m^2+n^2
とパラメタ表示するやつしかこれまで知らなかったのですが、
今日の Project Euler の問題
を解きながらふとググってみたら
■直角三角形とピタゴラスの定理 というページに当たりました。
こちらの冒頭と︻2︼に書かれている 行列で生成する方法 が面白い。知らなかった…。
プログラムとして使うことを考えても、既約なのしか出てこないので gcd
や偶奇のチェックを入れる必要がなくて楽かも。
せっかくなので紹介されてる本をAmazonでポチっとしてみました。楽しみ。
ほげ線(上り) A -> C -> B 7:45 8:25 8:45 8:00 8:40 9:00 8:15 8:55 9:15 ふが線(上り) ぴよ線(上り) A -> D -> B D -> C 8:00 8:05 9:10 8:07 8:22 8:20 8:25 9:30 8:20 8:35 8:40 8:45 9:50 8:33 8:48今度は、単純に駅と接続関係だけからグラフを作ろうとすると、 ﹁時刻表﹂の情報が抜け落ちてしまいます。 線に﹁時刻表﹂の情報を付加情報として乗っけてグラフと見なすことはできなくはないですが、 そういうグラフを作っても既存のアルゴリズムを適用することができません。 ダイクストラ法が扱える付加情報は"距離"と"向き"だけですし、 他のアルゴリズムでも、扱う付加情報はせいぜい︵線をネットワーク接続と見なして︶"回線容量" くらいです。 繰り返します。グラフのアルゴリズムを適用するには、 線には"距離"か"向き"か"容量"程度の情報しか乗せられません。 でもなんとかして無理矢理時刻表の情報を乗せてグラフを作りたい。どうしましょう。 そう、線には"距離"しか乗せちゃいけないなら、点の方に乗せればいいじゃない!
﹃Anarchygolfania という
国で流通している貨幣(コイン)の一覧と、 払いたい金額が与えられ
ます。 できるだけコインの枚数が少なくなる払い方を答えましょう﹄で
す。 たとえば、Anarchygolfania には1円玉と7円玉
と12円玉だけがある場合、14円を払うには、7円玉2枚で払うのが最適
です。