215.1

プログラミングにおいて大事なことは、与えられた仕様の通りにコードを書くこと。下手な最適化をしてはいけない。最適化は実際に動くコードができた後で、論理的に等価な変換だけをする。

250

五つのスコアのうち、最高点と最低点を除いた三つの合計に、重みをかけると実際の得点が得られる。スコアのうち四つが既知であるとき、特定の得点を実現できる最小のスコアを求めよ、という問題。


五つ目のスコアを可能な値すべて試す。五つのスコアから真面目に中間値三つを取り出すには、五つ目の値で分岐するのではなく、五つの値から最高値と最低値を切り捨てるようにした方が安全。というか適当に書いたら間違えた、というだけのお話。

500

文字列の同値関係が複数与えられる。二つのグループ間で、二つ以上共通の文字列がある場合、それらをマージしなくてはならない。マージ後の同値関係を答えよ、という問題。


いわゆる実装系の問題。適当にクラスを作って、マージして回るのが健全。グループ数について三乗ループをやるだけ。

1100

N本の線分が与えられ、i番目の線分の終点と、i+1番目の線分の始点はつながっている。線分の上を移動するコストの倍で、線分のない部分を移動できるとき、最初の線分の始点から、最後の線分の終点までの最小移動コストを求めよという問題。


取り敢えず線分を辿ってスコアを付けて、線分上の任意の二点間のショートカットを収束するまで適用する、というのをやればいいんじゃないかなぁとふと思ったりもしたけれど、ダメだろうなぁ。