TopCoder SRM606: EllysNumberGuessing
それぞれの guess, answer について guess + answer、 guess - answer のどちらかが必ず答えになる。よってこの2要素となる候補の集合積を取ることで、答えの候補が導出できる。
また、答えは必ず 1 以上 1,000,000,000 以下でないといけないのでその条件で絞り込む必要がある。
LINQ を使うと綺麗にかける貴重な Div1Easy。
public class EllysNumberGuessing { public int getNumber(int[] guesses, int[] answers) { var candidates = guesses.Zip(answers, (g, a) => new[] { g + a, g - a }); var satisfied = candidates .Aggregate((set1, set2) => set1.Intersect(set2).ToArray()) .Where(v => 1 <= v && v <= 1000000000) .ToArray(); if (satisfied.Count() >= 2) return -1; if (satisfied.Count() == 0) return -2; return satisfied.Single(); } }