• SCOI2009 生日快乐


    题目大意:n*m的矩形,切成面积相等的n块,要求N 块的长边与短边的比值的最大值最小。n<=10.

    初看这道题没有思路,虽然n<=10但是又没说只能切成整数,所以就不知道怎么捉。。二分答案又没想到怎么验证。

    事实上,我没有注意到面积相等这个条件。由于只能切(不能拼),所以每次切完的面积必然是n的整数倍,这样就可以搜了。

    ※注意

    double r;
    int n=5;
    r=1/n;
    
    printf("lf",r);//此时输出0.000000
    
    r=(double)1/(double)n;
    printf("%lf",r);//此时输出0.200000
    View Code
     1 /**************************************************************
     2     Problem: 1024
     3     Language: C++
     4     Result: Accepted
     5     Time:676 ms
     6     Memory:804 kb
     7 ****************************************************************/
     8  
     9 #include <cstdio>
    10 #include <cstdlib>
    11 #include <cmath>
    12 #include <algorithm>
    13 #define bigger(a,b) ((a)>(b)?(a):(b))
    14 #define minner(a,b) ((a)<(b)?(a):(b))
    15 #define INF 999999999;
    16 double x,y;
    17 int n;
    18 double ans;
    19 double dfs(double x,double y,int n)
    20 {
    21     int i;
    22     double r,ans=INF;
    23     double rtn=bigger(x,y)/minner(x,y);
    24     //printf("-------%lf %lf %d %lf\n",x,y,n,rtn);
    25     if(n==1) return rtn;
    26     r=(double)1/(double)n;
    27     for (i=1;i<n;i++)
    28     {
    29         double a,b;
    30         a=bigger(dfs(x*i*r,y,i),dfs(x*(n-i)*r,y,n-i));
    31         b=bigger(dfs(x,y*i*r,i),dfs(x,y*(n-i)*r,n-i));
    32         ans=minner(ans,minner(a,b));
    33     }
    34     return ans;
    35 }
    36 int main()
    37 {
    38     scanf("%lf%lf%d",&x,&y,&n);
    39     double ans=dfs(x,y,n);
    40     printf("%lf",ans);
    41     return 0;
    42 }
    
    
    
    
    
  • 相关阅读:
    转载Typora学习笔记
    SpringMVC整体接受前台参数
    基于SSM框架实现oa项目
    Don't know how to iterate over supplied "items" in &lt;forEach&gt;
    springMVC自定义类型转换器(date类型转换)
    springMVC异常处理
    linux服务器基础运维
    什么是服务器
    mysql binlog日志 恢复数据,mysqldump备份
    nginx LVS Haproxy
  • 原文地址:https://www.cnblogs.com/loveidea/p/2872439.html
Copyright © 2020-2023  润新知