• EOJ Monthly 2020.7 A. 打字机


    题面

    Cuber QQ 长期在网络上与他人对线,一天,他发明了一台神奇的打字机。这台打字机只能处理由 a,b,X 构成的字符串。具体来说,打字机能够执行如下三种操作。

    操作:将任意一个 X 替换为 aX 。
    操作:将任意一个 X 替换为 aXbX 。
    操作:删除任意一个 X 。
    打字机启动时,屏幕上有且仅有一个 X 。

    现在 Cuber QQ 想要打出一个仅包含 a , b 的字符串 。但是他有选择困难症,注意到,操作 和操作 都能生成字符 a 。如果 中的某个 a 既可以通过操作 得到,又可以通过操作 得到,Cuber QQ 就会因为难以抉择而不快乐。

    Cuber QQ 为了向你详细说明这一点,他决定把操作 生成的 a 标记为 ,把操作 生成的 a 标记为 。在这种表示下,Cuber QQ 是否快乐等价于通过各种操作方式(如果存在)生成的字符串 是否完全一样。

    现在 Cuber QQ 把这个字符串 告诉你,请你告诉他,他是否能成功打出这个字符串,如果能够打出这个字符串,你还要告诉他,他是否快乐。

    输入格式
    本题有多组测试数据,第一行包含一个整数 ()

    之后 行,每行是一个仅包含 a , b 的字符串 ()

    数据保证所有字符串的长度之和 。

    输出格式
    输出 行,分别对应每组数据。

    如果Cuber QQ可以打出这个字符串,并且开心,输出 Happy Fang。

    如果Cuber QQ可以打出这个字符串,但不开心,输出 Sad Fang。

    如果Cuber QQ无法打出这个字符串,输出 Dead Fang

    思路

    我们会发现,一个b的出现,在其前面肯定有一个a,那么去check每个b的前面,如果都只有一个a,那么这个肯定是一个最好的局面,否则的话他有可能是通过a去加出来的。代码实现我们维护一个stack,遇到b的时候就弹出一个a,a就入栈,遍历完所有b后,如果栈非空,那么就是一个sad局面。我们需要简化问题给定操作,比如1和3结合可以把任意x变成a,以及提取题目中的信息,也可能的非法情况,我们需要去模拟怎样会产生这种情况,再加以思考。

    代码实现

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    #include<stack>
    using namespace std;
    const int maxn=101;
    
    
    int main () {
        int t;
        cin>>t;
        while (t--) {
            string str;
            cin>>str;
            int len=str.length ();
            int d=-1;
            if (str.find_last_of('b')!=-1) d=str.find_last_of('b');
            stack <char> st; 
            int flag=0,tag=0;
            for (int i=0;i<len;i++) {
               if (st.empty ()) {
                   if (str[i]=='b') {
                       flag=1;
                       break;
                   }
                   else st.push (str[i]);
               }
               else {
                  if (str[i]=='b') {
                      st.pop ();
                      if (i==d) {
                          if (!st.empty()) {
                              tag=1;
                              break;
                          }
                      }
                  }
                  else st.push (str[i]);
               }
    
            }
            if (flag==1) {
                cout<<"Dead Fang"<<endl;
                continue;
            }
            else if (tag) {
                cout<<"Sad Fang"<<endl;
            }
            else cout<<"Happy Fang"<<endl;
        }
    
    
        return 0;
    }
    
  • 相关阅读:
    20172332 2018-2019-2 《程序设计与数据结构》实验一报告
    20172332 2017-2018-2 《程序设计与数据结构》第三周学习总结
    20172332 2017-2018-2 《程序设计与数据结构》第二周学习总结
    20172332 2017-2018-2 《程序设计与数据结构》第一周学习总结
    20172332 2017-2018-2《程序设计与数据结构》课程总结
    20172332 2017-2018-2 《程序设计与数据结构》实验五报告
    20172332 2017-2018-2 《程序设计与数据结构》实验四报告
    20172332 2017-2018-2 《程序设计与数据结构》第十一周学习总结
    20172332 2017-2018-2 《程序设计与数据结构》实验三报告
    20172332 2017-2018-2 《程序设计与数据结构》第十周学习总结
  • 原文地址:https://www.cnblogs.com/hhlya/p/13378513.html
Copyright © 2020-2023  润新知