# 酒鬼温迪 ## 题目描述 温迪喜欢喝酒,尤其是苹果酒和蒲公英酒。苹果酒有等级高低,共三等,蒲公英酒最为名贵。最低等级的苹果酒价钱$x$元/瓶,中等的$y$元/瓶,最高等级的$z$元/瓶,蒲公英酒一瓶$w$元/瓶,一桶酒的价钱和量是一瓶酒的五倍。温迪喝了$o$瓶酒和$p$桶酒,他的酒量上限是$q$瓶酒和$r$桶酒,超过这个上限就会酩酊大醉。迪卢克来到酒窖抓他时的愤怒值是温迪喝酒的钱数,如果温迪醉倒,他的愤怒值会是原本的2倍。事后,温迪又需要靠卖唱来赔偿迪卢克。 问,迪卢克最后的愤怒值是多少,温迪需赔偿迪卢克多少钱。 ## 输入格式 共三行,第一行4个正整数,$x$、$y$、$z$、$w$,中间以空格隔开; 第二行4个非负整数,$o$、$p$、$q$、$r$,中间以空格隔开; 第三行$o+p$个字符串,分别是他喝的每一瓶(或桶)酒(低等瓶苹果酒是`LA`,中等苹果酒是`MA`,高等苹果酒是`HA`,蒲公英酒是`DA`,如果按桶算则在前面加上`B`)中间以空格隔开。 ## 输出格式 一行,两个非负整数,分别是迪卢克的愤怒值和温迪需赔偿的钱数,中间以空格隔开。 ## 样例 #1 ### 样例输入 #1 ``` 1 2 3 4 2 3 4 5 MA HA BDA BDA BDA ``` ### 样例输出 #1 ``` 65 65 ``` ## 样例 #2 ### 样例输入 #2 ``` 1 2 3 4 2 3 1 1 MA HA BDA BDA BDA ``` ### 样例输出 #2 ``` 130 65 ``` ## 提示 $1$$≤$$x$$≤$$y$$≤$$z$$≤$$w$$≤$$10^7$; $0≤o≤100$,$0≤p≤100$,$0≤q≤1000$,$0≤r≤1000$.
时间: 2023-09-06 17:13:18 浏览: 318
根据题目描述,我们可以通过计算温迪喝酒的数量和类型来得到迪卢克的愤怒值和温迪需赔偿的钱数。
首先,我们根据输入的价格信息和酒的种类,建立一个价格映射表。然后,我们遍历温迪喝的每一瓶酒(或桶),根据价格映射表计算出温迪喝酒的总价值。
接下来,我们判断温迪是否超过了酒量上限。如果超过了上限,迪卢克的愤怒值会是原本的2倍。
最后,我们将温迪喝酒的总价值作为迪卢克的愤怒值,并计算温迪需赔偿的钱数(即愤怒值)。
下面是对应的C++代码实现:
```cpp
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main() {
// 输入价格信息和酒的种类
int x, y, z, w;
cin >> x >> y >> z >> w;
// 输入温迪喝酒的数量和酒量上限
int o, p, q, r;
cin >> o >> p >> q >> r;
// 建立价格映射表
map<string, int> priceMap;
priceMap["LA"] = x;
priceMap["MA"] = y;
priceMap["HA"] = z;
priceMap["DA"] = w;
// 输入温迪喝的每一瓶(或桶)酒
vector<string> drinks(o + p);
for (int i = 0; i < o + p; i++) {
cin >> drinks[i];
}
// 计算温迪喝酒的总价值
int totalValue = 0;
for (const string& drink : drinks) {
totalValue += priceMap[drink];
}
// 判断是否超过酒量上限,计算迪卢克的愤怒值和温迪需赔偿的钱数
int furyValue = totalValue;
if (o > q || p > r) {
furyValue *= 2;
}
cout << furyValue << " " << furyValue << endl;
return 0;
}
```
希望能对你有所帮助!如果还有其他问题,请随时提问。
阅读全文