时间:2021-07-01 10:21:17 帮助过:9人阅读
Input
The first line contains three space-separated integers n, a and b (1?≤?n,?a,?b?≤?109) ? the number of students and the sizes of the room.
Output
Print three integers s, a1 and b1 (a?≤?a1; b?≤?b1) ? the final area of the room and its sizes. If there are multiple optimal solutions, print any of them.
Sample test(s)
Input
3 3 5
Output
183 6
Input
2 4 4
Output
164 4题意:安排宿舍大小,每个学生至少需要6平方米的大小,求n个学生,原本a*b大小的宿舍,再满足要求的情况下,新的宿舍由旧的宿舍扩建后的大小思路:搜索,起初10^9是过不了的,但是我们枚举一边a的大小后,对于另一边b,如果加一个条件我们起初设a<=b,那么再枚举到a>b的时候,等于说会出现对称的情况了,这样数据量就小一半了#include#include #include #include typedef long long ll;using namespace std;int main() { ll n, a, b; cin >> n >> a >> b; n *= 6; int flag = 0; if (a > b) { // 初始让x < y swap(a, b); flag = 1; } ll ans = 2000000000000000000ll;; ll nx = -1, ny = -1; for (ll i = 1; i <= n; i++) { ll x = i; ll y = (n + x - 1) / x; if (x > y) // 不符合,即出现对称 break; if (x < a) x = a; if (y < b) y = b; if (x * y < ans) { nx = x; ny = y; ans = x * y; } } if (flag) swap(nx, ny); cout << ans << endl; cout << nx << " " << ny << endl; return 0;}