PAT 2020“五一”线上测试赛:7-3 垃圾分类 (20分)

题目描述

图片

据香港《南华早报》2019年7月15日文章,上海严格的垃圾分类新规令不少居民抓狂。这催生出大量帮助找出正确分类答案的App和小程序。目前仅微信上就至少有280种与垃圾处理有关的App,在苹果应用商店也达130种。支付宝表示,已有60多家独立App开发商申请为该平台提供类似服务。

本题就请你现场实现一个简单的垃圾分类小助手。

输入格式

输入首先给出官方分类指南中每种物品的归属。在一行中给出一个正整数 N( 10 5 \le10​^5 ​​),即物品数量;随后 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

解题思路

首先根据已知信息建立 垃圾名称垃圾种类编号 的映射,可以用 mapunordered_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)。
  • # 代表输入结束,此行不用处理。

注意

部分测试点可能数据较多,推荐使用快速的输入输出方式(如 scanfprintf)。

程序代码

#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;
}

猜你喜欢

转载自blog.csdn.net/hyp19991114/article/details/105886507