码迷,mamicode.com
首页 > 其他好文 > 详细

Problem B: JRM的自动机

时间:2019-03-25 00:49:50      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:pac   问号   双引号   NPU   解题思路   script   inpu   ace   空格   

Description

JRM自称是自动机之鼻祖,今天他又发明了一个自动机。人称自动复读机,宣称比LGQ的复读机的性能好无数倍。这个复读机有很多功能,你可以教会他
如何回答一个问题,还可以询问他问题,如果他会的话,就会回答。他还有其他奇奇怪怪的设定,比如说你可以禁止他回答某个问题,然后还可以解除
这个禁止。

Input

每个输入仅有一组
第一行一个整数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 且仅由小写字母或英文的问号和感叹号组成,不包含任何空格和其他标点符号。

Output

对于每个t==2的查询,输出一个字符串,代表该问题的答案,或者输出“I don‘t know what to say!”(不包括双引号)

Sample Input

10
1 aaa? bbb!
2 aaa?
1 jrm? lgq!
1 lgq? lzl!
2 lzl?
3 lgq?
2 lgq?
4 lgq?
2 lgq?
2 jrm?

Sample Output

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 }

 

 

Problem B: JRM的自动机

标签:pac   问号   双引号   NPU   解题思路   script   inpu   ace   空格   

原文地址:https://www.cnblogs.com/yewanting/p/10591543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!