单点时限: 1.0 sec
内存限制: 512 MB
judge:https://acm.ecnu.edu.cn/contest/292/problem/A/
Cuber QQ 长期在网络上与他人对线,一天,他发明了一台神奇的打字机。这台打字机只能处理由 a
,b
,X
构成的字符串。具体来说,打字机能够执行如下三种操作。
操作:将任意一个 X
替换为 aX
。
操作:将任意一个 X
替换为 aXbX
。
操作:删除任意一个 X
。
打字机启动时,屏幕上有且仅有一个 X
。
现在 Cuber QQ 想要打出一个仅包含 a
, b
的字符串 s 。但是他有选择困难症,注意到,操作 1 和操作 2 都能生成字符 a
。如果 s 中的某个 a
既可以通过操作 1 得到,又可以通过操作 2 得到,Cuber QQ 就会因为难以抉择而不快乐。
Cuber QQ 为了向你详细说明这一点,他决定把操作 1 生成的 a
标记为 a1 ,把操作 2 生成的 a
标记为 a2 。在这种表示下,Cuber QQ 是否快乐等价于通过各种操作方式(如果存在)生成的字符串 s 是否完全一样。
现在 Cuber QQ 把这个字符串 s 告诉你,请你告诉他,他是否能成功打出这个字符串,如果能够打出这个字符串,你还要告诉他,他是否快乐。
本题有多组测试数据,第一行包含一个整数 T ( 1 ≤ T ≤ 1 0 5 ) T(1\le T\le 10^5) T(1≤T≤105)
之后 行,每行是一个仅包含 a , b 的字符串 s ( 1 ≤ ∣ s ∣ ≤ 1 0 6 ) s(1\le|s|\le 10^6) s(1≤∣s∣≤106)
数据保证所有字符串的长度之和 ∑ ∣ s ∣ ≤ 1 0 6 \sum{|s|}\le 10^6 ∑∣s∣≤106 。
输出 行,分别对应每组数据。
如果Cuber QQ可以打出这个字符串,并且开心,输出 Happy Fang
。
如果Cuber QQ可以打出这个字符串,但不开心,输出 Sad Fang
。
如果Cuber QQ无法打出这个字符串,输出 Dead Fang
。
3
ab
aab
baa
Happy Fang
Sad Fang
Dead Fang
注意几点:
测试样例:
in:
9
ab
aab
baa
abba
aabb
aaabb
aabbb
abaaa
aababb
out:
ab Happy Fang
aab Sad Fang
baa Dead Fang
abba Dead Fang
aabb Happy Fang
aaabb Sad Fang
aabbb Dead Fang
abaaa Happy Fang
aababb Happy Fang
#include
#define _for(i, a) for (register int i = 0, lennn = (a); i < lennn; ++i)
#define _rep(i, a, b) for (register int i = (a), lennn = (b); i <= lennn; ++i)
using namespace std;
const int maxn = 1000005;
int debug = 0;
int T;
char s[maxn];
void sol() {
scanf("%s", s);
if(debug) cout << s << "\t";
int l = strlen(s), f = 0;
for(; l > 0 && s[l - 1] == 'a'; --l);
_for(i, l) {
if(s[i] == 'a') ++f;
else --f;
if(f < 0) {
printf("Dead Fang\n");
return;
}
}
if(f > 0) printf("Sad Fang\n");
else printf("Happy Fang\n");
}
int main() {
#ifdef ONLINE_JUDGE
#else
freopen("in.txt", "r", stdin);
debug = 1;
#endif
while (cin >> T) {
_for(i, T) { sol(); }
}
return 0;
}