B3682 [语言月赛202211] Jewellery 题解

· · 题解

B3682 [语言月赛202211] Jewellery 题解

Source & Knowledge

2022 年 11 月语言月赛,由洛谷网校入门计划/基础计划提供。

文字题解

题目大意

给定 n 种道具的名称以及品质。给定 k 次抽奖情况,除第一次抽中外其余次抽中时均得到道具品质对应碎片数量的碎片。求最终获得碎片的数量。

解析

首先,可以统计每种道具的抽中的次数。我们使用一个长度为 n 的数组 c 记录。

对于第 i 种道具,我们暂且使用 v 来表示其品质所对应的碎片数量。那么,第 i 种道具产生的碎片数量则为 v \cdot (c _ i - 1)

因此,我们统计每种道具的抽中次数,按照上面的方式计算即可。

以下为统计次数过程核心代码:

struct node {
    string name;
    int val;
    int cnt;
} a[1005];
cin >> n >> k;
for (int i = 1; i <= n; ++i) 
    cin >> a[i].name >> a[i].val;
for (int i = 1; i <= k; ++i) {
    string var;
    cin >> var;
    for (int j = 1; j <= n; ++j) {
        if (var == a[j].name) {
            a[j].cnt++;
            break;
        }
    }
}

以下为计算过程核心代码:

const int value[] = { 0, 2000, 1000, 200, 36, 6 };
for (int i = 1; i <= n; ++i) {
    ans += value[a[i].val] * (a[i].cnt - 1);
}

视频题解

完整代码请在视频中查看。