题目描述
第五人格抽奖宝箱被称为珍宝。某一赛季珍宝池中共有 n n n 件道具。道具不可以重复获得。因此,第一次抽出某道具,可以将该道具放入仓库。之后抽出该道具,不会将该道具放入仓库,而是给予一定的碎片补偿。
道具共有五种品质,分别为金色、紫色、蓝色、绿色与白色,不同品质道具给予的碎片补偿数量不同,具体数量如下表所示。
品质 | 碎片补偿数量 | 品质代号 |
---|---|---|
金色 | 2000 2000 2000 | 1 1 1 |
紫色 | 1000 1000 1000 | 2 2 2 |
蓝色 | 200 200 200 | 3 3 3 |
绿色 | 36 36 36 | 4 4 4 |
白色 | 6 6 6 | 5 5 5 |
某 E 一共抽了 k k k 次珍宝。现在告诉你珍宝池和某 E 的抽出道具情况,请问某 E 一共得到了多少碎片。
输入格式
输入共 n + k + 1 n+k+1 n+k+1 行。
输入的第一行为两个正整数 n , k n,k n,k,分别代表珍宝池中道具的数量和某 E 抽珍宝次数。
接下来 n n n 行,每行一个字符串和一个整数,分别代表道具的名称和品质代号。
接下来 k k k 行,每行一个字符串,代表某 E 抽到的道具的名称。数据保证对应名称的道具在上面的 n n n 个道具中出现过。
输出格式
输出一行一个整数,代表可以获得的碎片数量。
样例 #1
样例输入 #1
5 10
Legendary 1
Epic 2
Rare 3
Uncommon 4
Common 5
Common
Uncommon
Common
Common
Uncommon
Legendary
Uncommon
Common
Uncommon
Rare
样例输出 #1
126
提示
【数据规模与约定】
对于前 20 % 20\% 20% 的数据,保证 n , k ≤ 10 n, k \leq 10 n,k≤10。
对于另外 10 % 10\% 10% 的数据,保证 n = 1 n = 1 n=1。
对于另外 10 % 10\% 10% 的数据,保证 k = 1 k = 1 k=1。
对于另外 10 % 10\% 10% 的数据,所有的 n n n 件道具全部为金色品质。
对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 1000 , 1 ≤ k ≤ 5000 1 \leq n \leq 1000, 1 \leq k \le 5000 1≤n≤1000,1≤k≤5000。所有名字长度 ≤ 10 \leq 10 ≤10。名字仅由英文大小写字母构成。保证不同道具名字不同。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
struct node
{
string name;
int id;
int cnt=0;
int flag=0;
}s[N];
int main()
{
int n,k;
cin>>n>>k;
string str;
int sum=0;
for(int i=1;i<=n;i++)
{
getchar();
cin>>s[i].name>>s[i].id;
if(s[i].id==1)
s[i].cnt=2000;
else if(s[i].id==2)
s[i].cnt=1000;
else if(s[i].id==3)
s[i].cnt=200;
else if(s[i].id==4)
s[i].cnt=36;
else if(s[i].id==5)
s[i].cnt=6;
}
for(int i=1;i<=k;i++)
{
getchar();
cin>>str;
for(int j=1;j<=n;j++)
{
if(s[j].name==str)
{
if(s[j].flag==0)
{
s[j].flag=1;
}
else if(s[j].flag==1)
sum+=s[j].cnt;
}
}
}
cout<<sum<<endl;
return 0;
}