• 1726 瓷片项链


    1726 瓷片项链

     

    2000年NOI全国竞赛

     时间限制: 2 s
     空间限制: 128000 KB
     题目等级 : 大师 Master
     
     
     
    题目描述 Description

    原始部落用一种稀有的泥土烧制直径相同的圆瓷片并串成项链,串的时候沿瓷片的直径方向顺次连接,瓷片之间没有空隙也不重叠,一条项链至少由一个瓷片构成。 

    每个烧制的瓷片厚度是一定的,直径D和所用泥土的体积V有以下关系:

    D = 0.3(V - V0)(V ≥ V0)

    D = 0                  (V < V0)

    其中 V0为烧制每一片的损耗,单位与 V 相同。当用料小于等于 V0时,不能烧制成瓷
    片。 
    例: V 总 = 10,V0 = 1,若烧制成一片瓷片,V = V 总= 10,D = 0.9。如果把泥土均分成 2 份,每份泥土的体积为 V = V 总/2 = 5,单个瓷片的直径为D' = 0.6 , 串起来的总长为 1.2。 给定了泥土的总体积和烧制单个瓷片的损耗,烧制的瓷片数不同,能够得到的项链总长度也不相同,请计算烧制多少个瓷片能使所得到的项链最长。

    输入描述 Input Description

    文件仅有两行,每一行仅包含一个整数和一个换行/回车符。第一行的数字为泥土总体积 V 总 (0<V 总<60000),第二行为烧制单个瓷片的损耗 V0(0< V0<600)。 

    输出描述 Output Description

    文件中仅包含一个数字和一个换行/回车符。该数字为能获得最长项链而烧制的瓷片数。 如果不能烧制成瓷片或者最优解不唯一(存在两个或者两个以上方案均能获得最长项链), 输出数字 0。 

    样例输入 Sample Input

    样例输入1:

    10

    1

    样例输入2:

    10

    2

    样例输出 Sample Output

    样例输出1:

    5

    样例输出2:

    0

    数据范围及提示 Data Size & Hint
     

    题解:

    看似送分的题,有些细节需要注意。不建议枚举保留最大值,因为精度误差不可避免,容易出问题。

    • 总体积为Vt,每片损耗为V0,设烧制x片
    • 则每片体积 V=Vt/x 应满足V>V0 即x<Vt/V0
    • 直径 D=0.3 * sqrt(V-V0)
    • 总长度

      • L=x*D
    • =x 0.3 sqrt(Vt/x-V0)
    • =0.3 sqrt( Vt x - V0 * x^2 )

    根号内部是一个二次函数,求其最值即可。当L取到最大值,有x=V/(2*V0)。

    无解的条件是x的小数部分为0.5

    AC代码:

    #include<cstdio>
    #include<cmath>
    using namespace std;
    int Vt,V0,ans;
    double x,dx;
    int main(){
        scanf("%d%d",&Vt,&V0);
        dx=floor(x=(double)Vt/V0/2);
        if(x-dx==0.5) ans=0;
        else ans=dx;
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    qt.qpa.plugin Could not load the Qt platform plugin xcb
    深度学习模型在移动端的部署
    ccproxy
    Java版本
    第四篇 -- Go语言string转其他类型
    第三篇 -- Go语言其他类型转String方法
    第二篇 -- Go语言转义字符与变量声明
    第五十三篇 -- MFC美化界面2
    C++第五十二篇 -- 多线程之消息传递
    第一篇 -- Go环境的搭建以及Hello World程序编写
  • 原文地址:https://www.cnblogs.com/shenben/p/5765122.html
Copyright © 2020-2023  润新知