[CF466B] Wonder Room
Description
每一间宿舍有一个a*b平方米的房间,想在那里正好容纳N个学生,每个学生的房间必须至少有6平方米,可以将房间的任何一侧(可能是两侧)扩大任意正整数米。扩建房间,使n个学生都能住在里面,且使房间的总面积尽可能小。
Solution
考虑枚举短边,这样实际上只要枚举到根号的位置就可以了
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(false);
int n, a, b;
cin >> n >> a >> b;
n *= 6;
int ans = 2e18, ans_a, ans_b;
int swap_flag = a > b;
if (a > b)
swap(a, b);
for (int i = 1; i * i <= 2 * n; i++)
{
int x = i;
int y = (n + i - 1) / i;
x = max(a, x);
y = max(b, y);
if (x * y < ans)
{
ans = x * y;
ans_a = x;
ans_b = y;
}
}
if (swap_flag)
swap(ans_a, ans_b);
cout << ans << endl
<< ans_a << " " << ans_b;
}