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

EOJ Monthly 2020.7 A. 打字机

时间:2020-07-26 01:48:34      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:while   turn   space   mat   i++   屏幕   int   str   代码   

题面

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;
}

EOJ Monthly 2020.7 A. 打字机

标签:while   turn   space   mat   i++   屏幕   int   str   代码   

原文地址:https://www.cnblogs.com/hhlya/p/13378513.html

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