TopCoder SRM 664 Div1 Easy: BearPlays
解法
式を書いてみると、K回目の操作が終わった後、Aの山の方は石の数が となっている。それを計算し、小さい方を返せば良い。
コード
import java.math.BigInteger; public class BearPlays { public int pileSize(int A, int B, int K) { long S = A + B; BigInteger aInteger = new BigInteger("2"); BigInteger kInteger = new BigInteger(String.valueOf(K)); BigInteger ansInteger = aInteger.modPow(kInteger, new BigInteger(String.valueOf(S))); long ans1 = ansInteger.longValue(); ans1 %= S; ans1 *= A; ans1 %= S; long ans2 = S - ans1; return (int) Math.min(ans1, ans2); } }