JRM自称是自动机之鼻祖,今天他又发明了一个自动机。人称自动复读机,宣称比LGQ的复读机的性能好无数倍。这个复读机有很多功能,你可以教会他
如何回答一个问题,还可以询问他问题,如果他会的话,就会回答。他还有其他奇奇怪怪的设定,比如说你可以禁止他回答某个问题,然后还可以解除
这个禁止。
JRM自称是自动机之鼻祖,今天他又发明了一个自动机。人称自动复读机,宣称比LGQ的复读机的性能好无数倍。这个复读机有很多功能,你可以教会他
如何回答一个问题,还可以询问他问题,如果他会的话,就会回答。他还有其他奇奇怪怪的设定,比如说你可以禁止他回答某个问题,然后还可以解除
这个禁止。
每个输入仅有一组
第一行一个整数Q(1<=Q<=10000)代表有Q次操作
接下来有Q行,每行先输入一个t,代表询问的类型
当 t == 1 时: 输入两个两个字符串,a和b,代表你教会了机器问题a的答案为b,如果问题a已经有答案,则覆盖之前的答案。
当 t == 2 时: 输入一个字符串a,代表你问机器一个问题a,如果机器会且有权限回答这个问题,则回答该问题的答案,如果不会或无权限,则输出 “I don‘t know what to say!”(不包括双引号)
当 t == 3 时:输入一个字符串a,代表如果接下来有t==2的操作时,禁止机器回答问题a。
当 t == 4 时:输入一个字符串a,代表如果问题a被禁止回答的话,接下来有t==2的操作时,可以回答问题a了。如果问题a没有被禁止,则无视本次操作。
所有字符串长度 <=10 且仅由小写字母或英文的问号和感叹号组成,不包含任何空格和其他标点符号。
对于每个t==2的查询,输出一个字符串,代表该问题的答案,或者输出“I don‘t know what to say!”(不包括双引号)
10
1 aaa? bbb!
2 aaa?
1 jrm? lgq!
1 lgq? lzl!
2 lzl?
3 lgq?
2 lgq?
4 lgq?
2 lgq?
2 jrm?
bbb!
I don‘t know what to say!
I don‘t know what to say!
lzl!
lgq!
解题思路:这道题就是看着题意来写,这道题我在比赛的时候心态不太好,if的位置放错,一直wrong answer;
主要是用两个map数组来记录问题是否被回答;问题是否被禁止回答,问题是否解除禁止;
1 #include<iostream> 2 #include<map> 3 using namespace std; 4 5 int Q; 6 string s , t; 7 int a; 8 map<string,string>mp; //用mp来记录答案;方便查询的时候立即输出; 9 map<string,int>vis; //用vis来记录该问题是否被回答过; 10 map<string,int>flag; //用flag来记录是否被禁止回答; 11 int main() 12 { 13 cin>>Q; 14 for(int i = 0 ; i < Q;i++) 15 { 16 cin>>a; 17 if(a==1) 18 { 19 cin>>s>>t; 20 mp[s] = t; //输入问题的答案; 21 vis[s] = 1; //记录该问题是有答案的 22 } 23 if(a==2) 24 { 25 cin>>s; 26 if(vis[s]==1&&flag[s]==0) //该问题是有答案的且没有被禁止; 27 { 28 cout<<mp[s]<<endl; //直接输出答案; 29 } 30 else 31 cout<<"I don‘t know what to say!"<<endl; //如果问题没有答案或者被禁止了 32 } 33 34 if(a==3) 35 { 36 cin>>s; 37 flag[s] = 1; //标记该问题被禁止了; 38 } 39 if(a==4) 40 { 41 cin>>s; 42 flag[s] = 0; //让问题恢复没有被禁止状态; 43 } 44 } 45 return 0; 46 }
原文:https://www.cnblogs.com/yewanting/p/10591543.html