2013-09-18から1日間の記事一覧
こういうCROSS JOIN系の処理は、クエリ式のほうがメソッド形式より簡単に書ける。 public class TopFox { public IEnumerable<string> cand(string s) { return Enumerable.Range(1, s.Length).Select(i => s.Substring(0, i)); } public int possibleHandles(string</string>…
まず青い点、黄色い点、緑の点を結んた三角形について考える。まず左側の黄色い点と右側の緑色の点を選択する。 このとき結んだ直線より下に黒点が存在する場合は、どの青い点を選んでも三角形の外側になるため、該当する三角形は存在しない。そして2点を選…
外周を沿うように、大きく「へ」の字に車を移動させると残った部分は、高さ 0 から treeHeight-2 まで完全二分木が2つずつになる。Editorial の図がわかりやすい。 このことから漸化式に帰着できるので、あとは動的計画法で求める。最初 dp = new long[tree…
seq[i] >= seq[i+1] になっている部分が LISNumber の切れ目になるので、その箇所の個数に1足したものが答え。Zip() の段階で 1 か 0 に変換して Sum() すれば短く書けることに気づいた。 public class LISNumberDivTwo { public int calculate(int[] seq) …
Y の中にある高さについての解の個数を全て調べるだけ……と思ってたけど普通にシステムテストに落ちた。確かに 'N' の字の形状だと、その間を調べないと答えが 2 になってしまう。 座標に全て2倍にして、 Y の中の要素を +1, 0, -1 したものをしたものを調べ…
public class StringPath { const int mod = 1000000009; int n, m; string A, B; int?[,,] memo; int newState(int row, int col, String s, char c, int bit) { if (((1 << col) & bit) != 0) { bit ^= (1 << col); if (s[row + col] == c) { if (col + 1 …