C♯の勉強

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

2013-09-17から1日間の記事一覧

TopCoder SRM 586: StringWeightDiv2

L が 26 以下の場合は、"abc","cz" のような同じ文字が2つ以上含まれない文字列が最小の重さ (= 0) になる。このときの総数は、 順列P(26, L) となる。L が 27 以上の場合は、"a..ab..bc..c..yz..z" のような同じ文字が一箇所にまとまっていて、かつ全ての…

TopCoder SRM 591: YetAnotherTwoTeamsProblem

最小のスキルの固定して、|skill| 分だけ動的計画法すると O(50 * 50 * 50 * 60000) でTLE。スキルが高い順に足していくと、最後に足されたスキルが最小のスキルになる。 そのことを利用して、昇順からナップサップの動的計画法をしていく、いざ足し合わせる…

TopCoder SRM 591: TheArithmeticProgression

a, b, c それぞれの変数を変更した場合の差分の最小値を出す。 public class TheArithmeticProgression { public double minimumChange(int a, int b, int c) { return Enumerable.Min(new[]{ Math.Abs(c - (b + b - a)), Math.Abs(a - (b + b - c)), Math.A…

TopCoder SRM 591: ConvertibleStrings

文字の種類は 'A'... 'I' の9種類しかない。 となると ('A'...'I') -> ('A'...'I') の割り当ての仕方は 9! になるため、全部試しても間に合う。それぞれの割り当てについて、割り当て通りではない (A[i], B[i]) を削除すればよい。next_permution は C♯ に…

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; } }