1. 程式人生 > 實用技巧 >EOJ Monthly 2020.7 A. 打字機(字首和+思維)

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的字首和,這個字串無法打出,剩下的情況都是可以打出但不開心。
具體證明還是看官方題解吧…