标签: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;
}
标签:while turn space mat i++ 屏幕 int str 代码
原文地址:https://www.cnblogs.com/hhlya/p/13378513.html