Test Message

b762: 英國聯蒙

內容

隨著時代來到曉責元 6666 年,世界第 87 次戰爭開打了。
而在這次大戰中特別強勢的 國際蘿莉保護王朝 (Expansive National Guardianship Loli Analysis Neighborly Dynasty ,簡稱 ENGLAND)
掌握了相當大部分的勢力,為了與他們的對手沉澱國抗衡,他們這次打算邀請蒙古和他們聯手作戰,然而語言的橫溝(GENERATION GAP)是難以跨越的,
除了將句子重新排序外,我們透過系統統一發出的戰鬥線報可以得知每一個士兵的戰鬥狀況,
系統發出的線報有分成三種:

  1. “Get_Kill” 代表士兵剛剛英勇的殺死了一名敵人
  2. “Get_Assist” 代表士兵機靈的剛剛透過協助別人撿到了一個助攻
  3. “Die” 代表士兵掛了 ORZ
    你的工作就是接收指令,並發送線報回王朝,線報的規則如下:
  4. 若是擊殺了一名敵人,並且連續擊殺( 即擊殺之間沒有死亡 ) 未滿 3 次,則輸出一行”You have slain an enemie.”
  5. 若是連續擊殺累計 3 次,則輸出一行”KILLING SPREE!”
  6. 若是連續擊殺累計 4 次,則輸出一行”RAMPAGE~”
  7. 若是連續擊殺累計 5 次,則輸出一行”UNSTOPPABLE!”
  8. 若是連續擊殺累計 6 次,則輸出一行”DOMINATING!”
  9. 若是連續擊殺累計 7 次,則輸出一行”GUALIKE!”
  10. 若是連續擊殺累計 8 次以上,則輸出一行”LEGENDARY!”
  11. 若是在連續擊殺未滿 3 次時死亡,則輸出一行”You have been slained.”
  12. 若是在連續擊殺累計 3 次以上時死亡,則輸出一行”SHUTDOWN.”

輸入

輸入有兩行,第一行有一數字 N,代表共有 N 條指令 ( N <= 40 )
第 2~N+1 行為指令,保證指令只會有提敘中列舉出的三種

11
Get_Kill
Get_Kill
Get_Assist
Get_Assist
Get_Kill
Die
Get_Kill
Get_Assist
Get_Kill
Die
Get_Kill

輸出

照著國際蘿莉保護王朝的規則輸出線報,並在最後一行輸出士兵目前為止的戰績( 擊殺次數 / 死亡次數 / 助攻次數 )

You have slain an enemie.
You have slain an enemie.
KILLING SPREE!
SHUTDOWN.
You have slain an enemie.
You have slain an enemie.
You have been slained.
You have slain an enemie.
6/2/3


解題思路

簡單的流程處理,因為狀態的字串長度皆不同所以可以用字串長度判斷簡化程式,另外要注意處理連殺 > 8 的情況。

本題原本打算用 gets() 去接字串但範例輸入的第 5 行有奇怪的 Tab 混進去了,不知道作者是想表達裡面有 Tab 或是單純手誤,所以最後改用 scanf(“%s”)


完整程式碼

AC (2ms, 108KB)
#include <stdio.h>
#include <string.h>

char rowKill[][30] = { "", "You have slain an enemie.", "You have slain an enemie.", "KILLING SPREE!",
"RAMPAGE~", "UNSTOPPABLE!", "DOMINATING!", "GUALIKE!", "LEGENDARY!" }, str[15];

int main()
{
int n, act, k, d, a, rk;
while (scanf(" %d", &n) == 1)
{
k = d = a = rk = 0;
for (int i = 0; i < n; i++)
{
scanf(" %s", str);
act = strlen(str);
if (act == 8)
{
k++, rk++;
puts(rowKill[rk < 8 ? rk : 8]);
}
else if (act == 10)
{
a++;
}
else
{
puts(rk < 3 ? "You have been slained." : "SHUTDOWN.");
d++, rk = 0;
}
}
printf("%d/%d/%d\n", k, d, a);
}
return 0;
}