3406 Last digit
えーと、当然だけど、Java で BigInteger(or BigDecimal)を使ってナイーブに計算しようとしても無理です。n, m は最大で 1,000,000 なので Time Limit Exceeded を食らうこと確実。
要するにこういうのは駄目ね。
import java.util.Scanner; import java.math.BigInteger; import static java.math.BigInteger.*; /* * This program is too slow. */ public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n, m; BigInteger N, M; n = s.nextInt(); m = s.nextInt(); if (m > n - m) { m = n - m; } N = new BigInteger(Integer.toString(n)); M = new BigInteger(Integer.toString(m)); BigInteger one = ONE; BigInteger r = ONE; for (int i = 0; i < m; i++) { BigInteger I = BigInteger.valueOf(i); r = r.multiply(N.subtract(I)).divide(one.add(I)); } while (r.mod(TEN).equals(ZERO)) { r = r.divide(TEN); } System.out.println(r.mod(TEN)); } }
まぁ、これは Short Coding というより、それ以前にちゃんと Accept されるプログラムを書く段階がそれなりに難しいじゃないかと思う。