TopCoder SRM 657 Div1 Easy: ProblemSets

解法

二分探索するだけ。(なぜかできなかった)

コード

public class ProblemSets {

	public long maxSets(long E, long EM, long M, long MH, long H) {
		long low = 0;
		long high = Long.MAX_VALUE;
		while (high - low > 1) {
			long mid = (high + low) / 2;

			long tmpEM = EM - Math.max(0, mid - E);
			long tmpMH = MH - Math.max(0, mid - H);
			if (tmpEM < 0 || tmpMH < 0 || tmpEM + tmpMH - Math.max(0, mid - M) < 0) {
				high = mid;
			} else {
				low = mid;
			}
		}

		return low;
	}

}