C♯の勉強

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

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

TopCoder SRM 588: GUMIAndSongsDiv2

問題文Div1 とは違って、|songs| が 15以下なので全探索で通る。無理にLINQを使うとより複雑になる一例。 public class GUMIAndSongsDiv2 { IEnumerable<int> GetBitIndice(long n) { int index = 0; var list = new List<int>(); while (n > 0) { if ((n & 1) != 0) l</int></int>…

TopCoder SRM 588: KeyDungeonDiv2

問題文Count() を使うだけ public class KeyDungeonDiv2 { public int countDoors(int[] doorR, int[] doorG, int[] keys) { return Enumerable.Range(0, doorR.Length) .Count(index => Math.Max(doorR[index] - keys[0], 0) + Math.Max(doorG[index] - key…

TopCoder SRM 589: FlippingBitsDiv1

問題文 public class FlippingBitsDiv1 { public int getmin(string[] _S, int M) { string S = String.Concat(_S); int N = S.Length; int L = (N - 1) / M + 1; int ans = int.MaxValue; if (M <= 18) { for (int i = 0; i < (1 << M); i++) { var dp = ne…

TopCoder SRM 589:GearsDiv1

問題文 public class GearsDiv1 { public int getmin(string color, string[] graph) { int N = graph.Length; int ans = int.MaxValue; string RGB = "RGB"; foreach (var c in RGB) { foreach (var c2 in RGB) { if (c == c2) continue; BipartiteMatching…

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]…

TopCoder SRM 589: FlippingBitsDiv2

問題文メモ付き探索する場合は、Nullableの配列を使うと初期化する必要がなくなるので楽メモ配列へのアクセスに Array.SetValue/GetValue を使うようにすると、メモ化に使うパラメタに破壊的代入してもバグらなくなる。追記:ただし、非常に速度が遅いので取…

TopCoder SRM 589: GearsDiv2

問題文 「一番最初に削除する場所を固定してから貪欲」を全箇所で試す 答えが 0 の場合は別処理 LINQ だと solve 関数のような一個前の値を見る系の処理が扱いづらいのが残念 public class GearsDiv2 { public int solve(String s) { int ans = 1; for (int …

TopCoder SRM 589: GooseTattarrattatDiv2

問題文最も使用されている文字に寄せればいいので、文字列の長さからそれぞれの文字の使用回数を引けばよい。 public class GooseTattarrattatDiv2 { public int getmin(string S) { return S.Length - Enumerable.Range('a', 26) .Select(c => S.Where(c2 =…

TopCoder で使用できないクラスなど

以下は使用するとコンパイルでエラーが出る System.Linq.AsParallel() System.Linq.GroupBy() System.Linq.ToLookup() System.Tuple yield return/break 構文 検証に使ったソースコード public IEnumerable<int> YieldTest() { yield return 0; } public void Lin</int>…