2363:Blocks

keyword

BruteForce C++

概要

N(<1000)個の単位立方体から直方体をつくるとき、最小の表面積を求める問題。
これまたサイズが小さいので、一々「和が一定のときは差が小さいときに積が最大に…」とか考えなくても全探索(O(n^1.5)位?)で間に合う。

int main(){
    int rept, n, i, j, ans, m;
    scanf("%d",&rept);

    while(rept--){
        ans = 1<<29;
        scanf("%d",&n);
        for(j=1;j<=n;j++)if(n%j==0){
            m = n/j;
            for(i=sqrt(m)+0.5;i>=1;i--)if(m%i == 0){
                ans = min(ans, 2*(m + j*(i + m/i)));
            }
        }
        printf("%d\n",ans);
    }

    return 0;
}