题目描述 餐厅中有 nn 个订单,每个订单都是一道由指定原材料制成的菜。 订单必须依次完成,若上的菜符合当前订单的要求,订单完成并消失;若上的菜不符合当前订单的要求,订单会仍然存在。 每完成一个订单,均会获得 pp 分,而连续成功完成订单可以获得小费作为分数奖励,连续第 xx 个完成的订单可以获得 q×(x−1)q×(x−1) 的额外分数。 所有订单全部完成后,再次上菜不获得任何分数。 鹦鹉厨师按照一定的顺序上了 mm 道菜,他想知道自己最后获得了多少分数。 输入数据 第 11 行 33 个整数 n, p, q (1≤n≤105, 1≤p, q≤100)n, p, q (1≤n≤105, 1≤p, q≤100)。 接下来 nn 行,第 i+1i+1 行表示第 ii 个订单,每个订单由一个字符串组成,该字符串的每个字符表示这个订单要求的一个原材料。 接下来 11 行,一个整数 m (1≤m≤105)m (1≤m≤105)。 接下来 mm 行,第 n+i+2n+i+2 行表示第 ii 道菜,每道菜由一个字符串组成,该字符串的每个字符表示这个道菜包含的一个原材料。 若上菜的原料集合和订单相同,即可算作完成订单要求。 保证每个字符串长度不超过 44 且每个字符均为大写英文字母。 例: 若订单为 ABCABC,菜为 BACBAC,订单成功。 若订单为 AABAAB,菜为 ABAABA,订单成功。 若订单为 AABAAB,菜为 AAAA,订单失败。 若订单为 AAAA,菜为 AABAAB,订单失败。 输出数据 输出一个数字为鹦鹉厨师最终获得的分数。
时间: 2023-05-19 17:06:24 浏览: 101
基于ssm+vue模具制造企业订单跟踪管理系统.zip
这是一道编程题,需要根据输入的订单和菜品进行匹配,计算得分。具体实现可以使用哈希表等数据结构来存储订单和菜品的信息,然后进行匹配和计算得分。以下是一个可能的实现:
```
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
int n, p, q, m;
cin >> n >> p >> q;
// 存储订单信息
unordered_map<string, int> orders;
for (int i = 0; i < n; i++) {
string order;
cin >> order;
orders[order]++;
}
// 匹配菜品并计算得分
int score = 0, tip = 0, cnt = 0;
for (int i = 0; i < m; i++) {
string dish;
cin >> dish;
if (orders.count(dish)) {
score += p;
cnt++;
if (cnt % q == 0) {
tip += q * (cnt / q - 1);
}
orders[dish]--;
if (orders[dish] == 0) {
orders.erase(dish);
}
}
}
// 输出得分
cout << score + tip << endl;
return 0;
}
```
注意,这个实现并没有考虑输入数据的边界情况,比如订单和菜品的数量为0的情况,字符串长度超过44的情况等等。在实际应用中需要根据具体情况进行修改和完善。
阅读全文