codeforce F. Multicolored Markers
http://codeforces.com/contest/1029/problem/F
这道题真的一点都不难……………………………………………………
对于大矩形面积a+b,从差距最小的因数开始遍历,直到遇到第一个a、b中的任何一个,能变成一个矩形并能放在大矩形中(因为最后的大矩形的面积一定等于a+b,所以剩余空间一定可以填补),我们就找到了解。
1 import java.util.*; 2 3 public class A { 4 public static void main(String[] args) { 5 Scanner io = new Scanner(System.in); 6 long a = io.nextLong(), b = io.nextLong(), c = a + b; 7 long min = 0, max = 0; 8 9 for (long i = (long) Math.sqrt(c); i >= 1; i--) { 10 if (c % i == 0) { 11 min = i; 12 max = c / i; 13 14 //当两个因数差距越来越大时,max的长度比min大一倍多,所以max妥妥超时 15 for (long j = min; j >= 1; j--) { 16 if (a % j == 0 && a / j <= max || b % j == 0 && b / j <= max) { 17 System.out.println((min + max) * 2); 18 return; 19 } 20 } 21 } 22 } 23 24 } 25 }