C♯の勉強

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

todo

TopCoder SRM581: TreeUnion

public class TreeUnion { const int inf = 1 << 28; int[,] Convert(string[] tree) { var array = String.Concat(tree).Split().Select(int.Parse).ToArray(); int n = array.Length + 1; int[,] d = new int[n, n]; for (int i = 0; i < n; i++) { for (i…

TopCoder SRM581: TreeUnionDiv2

public class TreeUnionDiv2 { int[,] warshallFloyd(string[] tree) { int n = tree.Length; var d = new int[n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i, j] = tree[i][j] == 'X' ? 1 : 1<<28; } } for (int i = 0; i < n; …

TopCoder SRM581: SurveillanceSystem

public class SurveillanceSystem { public string getContainerInfo(string containers, int[] reports, int L) { int n = containers.Length; var ans = Enumerable.Repeat('-', n).ToArray(); var cand = Enumerable.Range(0, n - L + 1) .Select(i => ne…

TopCoder SRM581: BlackAndWhiteSolitaire

"BWBW..." と "WBWB..." の2通りとの差分の最小値を出せばよい。 public class BlackAndWhiteSolitaire { public int minimumTurns(string cardFront) { int cost = cardFront.Select((c, index) => (c == 'B' ^ (index % 2 == 0)) ? 1 : 0).Sum(); return …