ホームページ  >  記事  >  ウェブフロントエンド  >  Codeforces ラウンド #266 (ディビジョン 2) B. Wonder Room_html/css_WEB-ITnose

Codeforces ラウンド #266 (ディビジョン 2) B. Wonder Room_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:57:57920ブラウズ

新年度が始まり、寮生の宿泊問題が起こりました。そんな寮の1つに、a?×?b平方メートルのワンダールームがあります。管理人はちょうど n 人の生徒をそこに収容したいと考えています。しかし、法律では、1 つの部屋に生徒 1 人あたり少なくとも 6 平方メートルの面積がなければならないと定められています (つまり、n 人の生徒の部屋の面積は少なくとも 6n 平方メートルでなければなりません)。管理者は、部屋のいずれかの側 (おそらく両側) を任意の正の整数メートルだけ拡大できます。 n 人全員が住むことができ、部屋の総面積ができるだけ小さくなるように、部屋を変えるのを手伝ってください。

入力

最初の行には、スペースで区切られた 3 つの整数 n、a、b (1 ?≤?n,?a,?b?≤?109)?生徒の数と部屋の広さ。

出力

3 つの整数 s、a1、b1 (a?≤?a1; b?≤?b1) を出力します。部屋の最終的な面積とそのサイズ。最適解が複数ある場合は、いずれかを出力します。

サンプルテスト

入力

3 3 5

出力

183 6

入力

2 4 4

出力

164 4题意:安排宿舍大小,每个学生至少需要6平方米的大小,求n个学生,原本a*b大小的宿舍,再满足要求的情况下,新的宿舍由旧的宿舍扩建后的大小思路:搜索,起初10^9是过不了的,但是我们枚举一边a的大小后,对于另一边b,如果加一个条件我们起初设a<=b,那么再枚举到a>b的时候,等于说会出现对称的情况了,这样数据量就小一半了<pre name="code" class="n">#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>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;}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。