EOJ Monthly 2020.7 A. 打字机(前缀和+思维)

Cuber QQ 长期在网络上与他人对线,一天,他发明了一台神奇的打字机。这台打字机只能处理由 a,b,X 构成的字符串。具体来说,打字机能够执行如下三种操作。
•	操作1:将任意一个 X 替换为 aX 。
•	操作2:将任意一个 X 替换为 aXbX 。
•	操作3:删除任意一个 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≤105)
之后 T 行,每行是一个仅包含 a , b 的字符串 s (1≤|s|≤106)
数据保证所有字符串的长度之和 ∑|s|≤106 。
输出格式
输出 T 行,分别对应每组数据。
如果Cuber QQ可以打出这个字符串,并且开心,输出 Happy Fang。
如果Cuber QQ可以打出这个字符串,但不开心,输出 Sad Fang。
如果Cuber QQ无法打出这个字符串,输出 Dead Fang。
通过观察可以知道,对于aXbX可以把aX插在中间得到aaXbX,进而得到a2a1b,也可把aXbX插在aX中并删去X得到a1a2b,因此a的数量和b的数量完全相等的串才会让其开心,然后我们可以在这个全由2操作生成的串的后面添加aX,不改变其开心与否。因此在最后一个出现b的位置判断a和b的前缀和是否相等就能判断是否开心。同时,如果某个位置b的前缀和大于a的前缀和,这个字符串无法打出,剩下的情况都是可以打出但不开心。
具体证明还是看官方题解吧…

你可能感兴趣的:(EOJ Monthly 2020.7 A. 打字机(前缀和+思维))