题解:P10708 [NOISG2024 Prelim] Tourist

· · 题解

挺简单的一道贪心题,评红吧。

题目大意

给你 n 天坐的火车(不应该是地铁吗)次数,每天可以买单程票,坐一次付 x 元;也可以直接买单日票,一天只需要付 y 元即可。

具体思路

对于每天的行程,比较买单程票的价钱和单日票的价钱,即比较 a_i \times xy,选择较小的,用 ans 记录下来,最后输出即可。

完整代码

#include<bits/stdc++.h>//万能头文件。 
using namespace std;
int main(){//主函数部分。 
    int n/*天数n*/,x/*单程票的价钱*/,y/*单日票的价钱*/,ans=0/*答案*/;
    cin>>n>>x>>y;//读入。 
    for(int i=0;i<n;i++){//循环天数。 
        int a;//坐火车的次数a。 
        cin>>a;//读入a。 
        ans+=min/*min函数,用于求两项中的最小值*/(x*a/*单程票的价钱*/,y/*单日票的价钱*/);
        /*
        上面的一行代码等价于:
        if(x*a<y)ans+=x*a;
        else ans+=y;
        和:
        ans+=x*a<y?x*a:y;
        这3段代码的效果是一样的。 
        */
    }
    cout<<ans;//输出结果ans。 
    return 0;
}