本文主要是介绍Codeforces Round 266 (Div. 2) - A. Cheap Travel(模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
安最近开始乘坐地铁上下班。我们知道,地铁票的单程票价为 a a a 卢布。此外,安安还发现她可以购买 m m m 次的特价票(可以多次购买)。票价为 b b b 卢布。安计算了一下,她需要乘坐地铁 n n n 次。请帮助安,告诉她最少要花多少钱才能乘坐 n n n 次地铁?
输入
单行包含四个空格分隔的整数 n n n 、 m m m 、 a a a 、 b ( 1 ≤ n , m , a , b ≤ 1000 ) b ( 1 ≤ n, m, a, b ≤ 1000 ) b(1 ≤ n, m, a, b ≤ 1000)–安计划的乘车次数、 m m m 乘车券涵盖的乘车次数、一张乘车券的价格和一张 m m m 乘车券的价格。
输出
打印一个整数 - 安需要花费的最低卢布金额。
首先这道题要考虑以下情况:
- 全选 a a a
- 全选 b b b
- 先选 b b b再选 a a a
没有先选 a a a再选 b b b,因为如果这种情况成立的话,就说明全选 a a a 的情况也会成立。
情况很多,如果你想要用一堆if
判断来判断去,肯定是很难得到最终答案,所以我们可以独立的算出这三种情况的答案,然后从中取最小值。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int n,m,a,b;cin >> n >> m >> a >> b;int ans1 = 0,ans2 = 0,ans3 = 0;//1int t = n/m;ans1 += b*t;if(n%m)ans1+=b;//2ans2 += a*n;//3t = n/m;ans3 += t*b;n-=m*t;if(a*n < b)ans3 += a*n;else ans3 += b;int res = min(ans1,ans2);res = min(res,ans3);cout << res << endl;return 0;
}
这篇关于Codeforces Round 266 (Div. 2) - A. Cheap Travel(模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!