据香港《南华早报》2019年7月15日文章,上海严格的垃圾分类新规令不少居民抓狂。这催生出大量帮助找出正确分类答案的App和小程序。目前仅微信上就至少有280种与垃圾处理有关的App,在苹果应用商店也达130种。支付宝表示,已有60多家独立App开发商申请为该平台提供类似服务。
本题就请你现场实现一个简单的垃圾分类小助手。
输入格式:
输入首先给出官方分类指南中每种物品的归属。在一行中给出一个正整数 N(≤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
代码
#include<stdio.h>
#include<iostream>
#include<string>
#include<map>
#include<string.h>
using namespace std;
string s[4]={"Gan laji","Shi laji","Ke Hui Shou","You Hai laji"};
map<string,int> vs;
int main(){
int n,type;
scanf("%d",&n);
char input[15];
for(int i=0;i<n;i++){
scanf("%s%d",input,&type); //用cin输入会慢很多!!!
string str(input);
vs[str]=type-1;
}
while(scanf("%s",input),strcmp(input,"#")){
string test(input);
if(vs.find(test)==vs.end()){
printf("?\n");
}else{
cout<<s[vs[test]]<<endl;
}
}
return 0;
}
这题一开始大部分测试样例都超时,原因是输入字符串用cin很慢。需要先用scanf输入,在通过string str(input)转换为string型。