首页 > 其他 > 详细

Wonder Room

时间:2015-05-04 22:17:50      阅读:295      评论:0      收藏:0      [点我收藏+]

题意:给n个学生安排住宿,条件是每个学生所分配的面积至少为6平米,给你学生数n及现有的房子面积a*b。可以从任何边扩展,问扩展后的满足条件的最小面积及边长。

思路:按边暴力

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <stdlib.h>
#include <string.h>
#define N 1000010
#define INF 1000000000000
#define LL long long
#define eps 10E-9
#define mem(a)  memset(a,0,sizeof(a))
#define w(a)   while(a)
#define s(a)   scanf("%lld",&a)
#define ss(a,b)   scanf("%lld%lld",&a,&b)
#define sss(a,b,c)   scanf("%lld%lld%lld",&a,&b,&c)
using namespace std;
struct node
{
    LL x,y,sum;
} h[N];
bool cmp(node x,node y)
{
    return x.sum<y.sum;
}
LL n,i,j,a,b,c,s,a1,b1;
LL top=0;
int main()
{
    sss(n,a,b);
    if(a*b>=6*n)
    {
        cout<<a*b<<endl;
        cout<<a<<" "<<b<<endl;
    }
    else
    {
        for(j=b;; j++)
        {
            if(j-b>100000)
                break;
            i=6*n/j;
            if(b*i==6*n)
                i=6*n/j;
            else
                for(i=6*n/j;; i++)
                {
                    if(i*j>=6*n)
                        break;
                }
            if(i<a)
                break;
            h[top].sum=i*j;
            h[top].x=i,h[top++].y=j;
        }
        for(j=a;; j++)
        {
            if(j-a>100000)
                break;
            i=6*n/j;
            if(j*i==6*n)
                i=6*n/j;
            else
                for(i=6*n/j;; i++)
                {
                    if(i*j>=6*n)
                        break;
                }
            if(i<b)
                break;
            h[top].sum=i*j;
            h[top].x=i,h[top++].y=j;
        }
        sort(h,h+top,cmp);
        printf("%lld\n",h[0].x*h[0].y);
        if(a>b&&h[0].x<h[0].y||a<b&&h[0].x>h[0].y)
            swap(h[0].x,h[0].y);
        printf("%lld %lld\n",h[0].x,h[0].y);
    }
    return 0;
}


Wonder Room

原文:http://blog.csdn.net/bigsungod/article/details/45484609

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!