题目描述
据香港《南华早报》2019年7月15日文章,上海严格的垃圾分类新规令不少居民抓狂。这催生出大量帮助找出正确分类答案的App和小程序。目前仅微信上就至少有280种与垃圾处理有关的App,在苹果应用商店也达130种。支付宝表示,已有60多家独立App开发商申请为该平台提供类似服务。
本题就请你现场实现一个简单的垃圾分类小助手。
输入格式
输入首先给出官方分类指南中每种物品的归属。在一行中给出一个正整数 N( ≤ 10 5 \le10^5 ≤105),即物品数量;随后 N 行,每行给出一个物品名称(长度不超过 10 的、由小写英文字母和下划线组成的字符串)和该物品所属的分类(1 代表干垃圾、2 代表湿垃圾、3 代表可回收物、4 代表有害垃圾)。题目保证所有物品名称无重复。
随后每行给出一个查询物品的名称(格式与指南物品名称相同)。最后一行给出结束符 #
,表示查询终止,这一行不需要查询。
输出格式
对每个查询的物品,在一行中给出其所属分类:Gan laji
代表干垃圾;Shi laji
代表湿垃圾;Ke Hui Shou
代表可回收物;You Hai laji
代表有害垃圾。如果查询的物品不在指南中,则输出 ?
表示不知道。
输入样例
4
bao_zhi 3
dian_chi 4
dan_ke 2
bei_ke 1
dan_ke
dian_chi
ren_zha
bao_zhi
bei_ke
#
输出样例
Shi laji
You Hai laji
?
Ke Hui Shou
Gan laji
解题思路
首先根据已知信息建立 垃圾名称 到 垃圾种类编号 的映射,可以用 map
或 unordered_map
实现。
然后对于每一组查询,先判断待查询的垃圾名称是否在哈希表内。如果不在表内,则输出 ?
;如果在,则查询其种类编号,进而输出其垃圾种类。
样例解释
dan_ke
对应 2 号,即湿垃圾(Shi laji
)。dian_chi
对应 4 号,即有害垃圾(You Hai laji
)。ren_zha
在已知信息中没有(输出?
表示不知道)。bao_zhi
对应 3 号,即可回收物(Ke Hui Shou
)。bei_ke
对应 1 号,即干垃圾(Gan laji
)。#
代表输入结束,此行不用处理。
注意
部分测试点可能数据较多,推荐使用快速的输入输出方式(如 scanf
、printf
)。
程序代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<string, int> m;
int n;
scanf("%d", &n);
char s[15];
int tag;
while(n--)
{
scanf("%s %d", s, &tag);
m[s] = tag;
}
getchar();
while(scanf("%[^\n]", s), getchar())
{
if(strcmp(s, "#") == 0) break;
if(m.find(s) == m.end())
puts("?");
else
{
switch(m[s])
{
case 1:puts("Gan laji"); break;
case 2:puts("Shi laji"); break;
case 3:puts("Ke Hui Shou"); break;
case 4:puts("You Hai laji"); break;
}
}
}
return 0;
}