[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;
}

相关文章: