BZOJ1024 SCOI2009生日快乐

1 篇文章 0 订阅

1024: [SCOI2009]生日快乐

Time Limit: 1 Sec   Memory Limit: 162 MB
Submit: 1846   Solved: 1315
[ Submit][ Status][ Discuss]

Description

windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。 windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得每块蛋糕看起来漂亮,我们要求 N 块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?

Input

包含三个整数,X Y N。

Output

包含一个浮点数,保留6位小数。

Sample Input

5 5 5

Sample Output

1.800000

HINT

【数据规模和约定】

100%的数据,满足 1 <= X,Y <= 10000 ; 1 <= N <= 10 。


众所周知这题是个水题,但是为什么蒟蒻的我做了半个小时呢?因为这句话“并且必须把这块蛋糕切成两块”,果然看题仔细是成功的第一步。做法就是爆搜呢。代码如下:

<span style="font-size:14px;">/**************************************************************
    Problem: 1024
    User: duyixian
    Language: C++
    Result: Accepted
    Time:224 ms
    Memory:1272 kb
****************************************************************/
 
/* 
* @Author: 逸闲
* @Date:   2015-10-01 11:26:44
* @Last Modified by:   逸闲
* @Last Modified time: 2015-10-01 11:41:43
*/
 
#include "cstdio"
#include "cstdlib"
#include "iostream"
#include "algorithm"
#include "cstring"
#include "queue"
 
using namespace std;
 
#define INF 0x3F3F3F3F
#define MAX_SIZE 
#define Eps 
#define Mod 
 
inline int Get_Int()
{
    int Num = 0;
    char ch;
    do
        ch = getchar();
    while(ch < '0' || ch > '9');
    do
    {
        Num = Num * 10 + ch - '0';
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9');
    return Num;
}
 
int N, X, Y;
 
double DFS(double X, double Y, int N)
{
    if(N == 1)
        return max(X, Y) / min(X, Y);
    double Ans = INF;
    for(int i = 1; i < N; ++i)
    {
        Ans = min(Ans, max(DFS(X, Y * i / N, i), DFS(X, Y * (N - i) / N, N - i)));
        Ans = min(Ans, max(DFS(X * i / N, Y, i), DFS(X * (N - i) / N, Y, N - i)));
    }
    return Ans;
}
 
int main()
{
    cin >> X >> Y >> N;
    printf("%.6lf\n", DFS(X, Y, N));
    return 0;
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值