TopCoder SRM622: BoxesDiv2
一番小さな箱を2つ選んで、一段階サイズが大きいの箱に入れる。これを箱が1つだけになるまで繰り返す。
public class BoxesDiv2 { int ToPower2(int x) { for (int i = 0; i <= 20; i++) { if (x <= (1 << i)) return i; } return -1; } public int findSize(int[] candyCounts) { var candies = candyCounts.Select(ToPower2).ToList(); while (candies.Count() > 1) { candies.Sort(); candies.Add(Math.Max(candies[0], candies[1]) + 1); candies.RemoveAt(0); candies.RemoveAt(0); } return 1 << candies.Single(); } }