1 条题解

  • 0
    @ 2025-8-24 21:16:01

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Igallta
    「この世には愛も知らない人が 沢山いるんですよ」

    搬运于2025-08-24 21:16:01,当前版本为作者最后更新于2025-03-05 16:33:01,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    简化题意

    给你七个浮点数 a,b,c,d,e,f,x,ya,b,c,d,e,f,x,y

    ax+byax+bycycydy+edy+e 哪个最大就输出哪个的编号和值。(编号从左往右分别是 1 2 3)

    思路

    首先,你得输入这七个变量。

    然后注意到数据范围是 a,b,c,d,e,f,x,y107a,b,c,d,e,f,x,y \leqslant 10^7,也就是说最大的情况答案是 2×10142\times10^{14},这个数用 float 存就会炸,所以需要用 double。(但是浮点数应该也不会有人去用 float 吧)

    想好之后直接算就可以了,这部分的代码:

    cin>>a>>b>>c>>d>>e>>x>>y;
    double lb1,lb2,lb3;
    lb1=a*x+b*y;
    lb2=c*y;
    lb3=d*y+e;
    

    然后就有人不会统计最大值,因为它并非一个数组,可能比较麻烦。我们这里注意到如果有多个最大值那么输出编号最小那个,所以我们可以把最大值求出来之后挨个比较。这样代码量比较小。

    然后便是输出的问题,因为输出的权值需要保留两位小数。

    对于保留两位小数我们可以用:

    cout<<fixed<<setpricision(n)<</*......*/;
    

    你可以把 nn 替换为任意整数,这样在从我打的注释开始,后面的数都会保留两位小数。

    因为它是把后面的数保留两位小数,所以我们输出的时候先把编号输出了再 setpricision 就可以了。

    这部分的代码:

    if(maxn==lb1){
    	cout<<1<<' '<<fixed<<setprecision(2)<<maxn;
    }else if(maxn==lb2){
    	cout<<2<<' '<<fixed<<setprecision(2)<<maxn;
    }else{
    	cout<<3<<' '<<fixed<<setprecision(2)<<maxn;
    }
    

    这道题就讲完啦,希望可以帮到你!

    • 1

    信息

    ID
    8585
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者