zoukankan      html  css  js  c++  java
  • (原创)Problem B: JRM的自动机

    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 }
     
  • 相关阅读:
    解决Win8设置为快速启动后ubuntu不能访问win下磁盘的方法
    Why Not Specialize Function Templates?
    Build your first web service with PHP, JSON and MySql
    本地开发与linux服务器端的文件传输
    数据库设计中一对多的解决方法.
    C++ 模板练习摘要
    Understanding ASP.NET Validation Techniques
    我的sublime text 个人设置
    Eclipse 快捷键
    数字图像处理
  • 原文地址:https://www.cnblogs.com/yewanting/p/10591543.html
Copyright © 2011-2022 走看看