C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

Div1Easy

TopCoder SRM 586: PiecewiseLinearFunction

Y の中にある高さについての解の個数を全て調べるだけ……と思ってたけど普通にシステムテストに落ちた。確かに 'N' の字の形状だと、その間を調べないと答えが 2 になってしまう。 座標に全て2倍にして、 Y の中の要素を +1, 0, -1 したものをしたものを調べ…

TopCoder SRM 591: TheTree

public class TheTree { public int maximumDiameter(int[] cnt) { int D = cnt.Length; int ans = D; for (int s = 0; s < D; s++) { int len = cnt.Skip(s).TakeWhile(c => c >= 2).Count(); ans = Math.Max(ans, len + D - s); } return ans; } }

TopCoder SRM 587: JumpFurther

問題文一歩進む、二歩進む、と続けていって、もし障害物にあたったら「一歩進む」をなかったことにする。 その直後のターンでは少なくとも「二歩以上進む」ことになるので必ず障害物は飛び越される。 public class JumpFurther { public int furthest(int N,…

TopCoder SRM 590:FoxAndChess

begin, target の '.' 以外の文字(LR)を左から突き合わせる 文字や長さが一致しなかったら、"Impossible" あとは移動前後の位置関係が矛盾しているかを判定する 本番だと Where(...).Select((c, index) => index) としてしまって、フィルタ後の添え字を返し…

TopCoder SRM 588: GUMIAndSongsDiv1

問題文tone が最大の歌と最小の歌を固定して、あとはその範囲内の歌の中から duration が低いものを貪欲に選んでいけばよい。 このとき、「tone が最大の歌と最小の歌」を絶対選ぶようにしなくても、選ばれなかった時点で内側の範囲のほうがよりよい解が得ら…

TopCoder SRM 589: GooseTattarrattatDiv1

問題文ToLookup() が使えないことから微妙なプログラムになってしまった。 public class GooseTattarrattatDiv1 { public int getmin(string S) { int n = S.Length; DisjointSet ds = new DisjointSet(26); for (int i = 0; i < n; i++) { ds.unionSet(S[i]…