Codeforces Round #102 (Div. 1) A : Help Farmer
問題概要
ある正整数A,B,Cがあり、(A-1)*(B-2)*(C-2)の値が与えられる。A*B*Cの値として考えられる最小値と最大値を求める問題。
解法
全探索する。
acceptされたコード
#include <iostream> using namespace std; typedef long long int64; const int64 INF = 1LL<<62; int64 N; void init(){ cin >> N; } void solve(){ int64 mini = INF, maxi = -INF; for(int64 i=1; i*i <= N; i++)if(N%i==0){ for(int k=0; k<2; k++){ int64 A = (k==0 ? i : N/i); int64 M = N/A; for(int64 j=1; j*j <= M; j++)if(M%j==0){ int64 val = (A+1) * (j+2) * (M/j+2) - N; if(val >= 0){ mini = min(mini, val); maxi = max(maxi, val); } } } } cout << mini << " " << maxi << endl; } int main(){ init(); solve(); return 0; }