白駿1500回:最大乗




問題の説明

  • https://www.acmicpc.net/problem/1500
  • 方法

  • の組み合わせで近づき、タイムアウトしました.
  • S最大100,K最大20100 C 20=535983370403809682970.
  • sumが
  • の間にSを超えた場合、返される条件および可能な数字は、S−K+1である可能性があり、この条件は多すぎる.
  • に乗じた数の差が小さいほど、乗じ全体が大きくなります.
  • pseudocode

    main(){
    	int div = SK로 나눈 몫
    	int mod = SK로 나눈 나머지
        곱의 최대값 = div (k-mod)개와 (div+1) mod개를 모두 곱한 값
    }

    正解

    import java.io.*;
    
    class Main {
    	static int K;
    	static int S;
    	static long MaxScore = Long.MIN_VALUE;
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		S = sc.nextInt();
    		K = sc.nextInt();
    		int div = S / K;
    		int mod = S % K;
    		long answer = (long) (Math.pow((long) div, (K - mod)) * Math.pow((long) (div + 1), (mod)));
    		System.out.println(answer);
    
    	}
    
    }