题解:我果然还是太水了....这题一开始竟然没写出来....
对于a1,从a一直枚举到sqrt(6*n),算出每一个b1,与现有的答案比较,如果更优就输出。对于b1同理,最后输出答案和a1,b1即可。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long n,a,b,t,p,ans,a1,b1;
int main()
{
scanf("%I64d%I64d%I64d",&n,&a,&b);
if (n*6<=a*b)
{
cout <<a*b<<endl;
cout <<a<<" "<<b;
}
else
{
t=a; p=b;
for (t=a;t<=ceil(sqrt(6*n));t++)
{
p=ceil((6*n)*1.0/t);
if (p<b) p=b;
if (t*p<ans || ans==0)
{
a1=t; b1=p;
ans=a1*b1;
}
if (ans==6*n)
{
cout <<ans<<endl;
cout <<a1<<" "<<b1;
return 0;
}
}
for (p=b;p<=ceil(sqrt(6*n));p++)
{
t=ceil((6*n)*1.0/p);
if (t<a) t=a;
if (t*p<ans || ans==0)
{
a1=t; b1=p;
ans=a1*b1;
}
if (ans==6*n)
{
cout <<ans<<endl;
cout <<a1<<" "<<b1;
return 0;
}
}
cout <<ans<<endl;
cout <<a1<<" "<<b1;
}
return 0;
}