B. Wonder Room
题意:三个整数a,b,s。a*b>=s*6,否则,你需要任意增加a,b的值使得不等式成立且a*b尽量小。
思路:如果式子不成立,找出a,b中较小的那个数(假设a<b),递增枚举a,算出此时满足条件的最小的b,枚举直到a>b,从中选出最优。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <ctype.h>
#define INF 1000000000000000010LL
#define ll long long
#define max3(a,b,c) max(a,max(b,c))
using namespace std;
int main(){
ll n,a,b;
while(cin>>n>>a>>b){
ll n6=6*n;
if(n6>a*b){
ll ka;
ll kb;
ll ks=INF;
bool sw=0;
if(b<a){
swap(a,b);
sw=1;
}
ll tb=n6/a;
for(ll ta=a;ta<=tb;ta++){
tb=n6/ta;
if(tb<b){
tb++;
if(ta*tb>=n6){
if(ta*tb<ks){
ks=ta*tb;
ka=ta;
kb=tb;
}
}
break;
}
if(ta*tb<n6){
tb++;
}
if(ta*tb==n6){
ks=ta*tb;
ka=ta;
kb=tb;
break;
}
if(ta*tb>n6){
if(ta*tb<ks){
ks=ta*tb;
ka=ta;
kb=tb;
}
}
}
if(sw){
swap(ka,kb);
}
cout<<ks<<endl;
cout<<ka<<" "<<kb<<endl;
}else{
cout<<a*b<<endl;
cout<<a<<" "<<b<<endl;
}
}
return 0;
}