打怪
Description
電視劇里奧特曼和怪獸打了起來。怪獸會三個招數,分別用字符’R’, ‘B’,’L’表示。奧特曼爲了應對這三招,需要對應使出‘S’、‘K’、‘H’等三招。如果怪獸按任意的順序連續使出’R’, ‘B’,’L’這三招(稱爲“組合拳”),則威力大增。奧特曼必須使出終極大招才能戰勝,用‘C’表示。奧特曼的終極大招可以一次性化解怪獸的一次組合拳。怪獸後續出招要麼是單獨的新招,要麼是另一次組合拳的一部分。怪獸的任一招都不會屬於 2 次或更多次的組合拳。奧特曼從編劇那裏提前獲得了怪獸出招的順序,他應該以怎樣的順序出招,才能戰勝怪獸呢?
Input
一個字符串,表示怪獸的出招序列。序列長度在 1~1000000 之間。
Output
一個字符串,表示奧特曼的出招序列。
Sample
Hint
序列長度在 1~1000000 之間。
實現代碼
代碼如下:
#include<cstdio>
#include<cstring>
char way[1000005]={}; //怪獸的出招順序(初值爲'\0')
int main()
{
gets(way); //輸入怪獸的出招順序
for(int i=0;i<strlen(way);i++) //枚舉怪獸的每一招
{
if(way[i]+way[i+1]+way[i+2]=='R'+'B'+'L') //判斷是否是"組合拳",同時也判斷way[i...i+1]是否有值(即i+2在strlen(way)範圍內)
{
printf("C");//使用大招
i+=2; //跳過i+1、i+2(因爲它們屬於"組合拳")
}
else //如果爲單獨的新招
switch(way[i]) //枚舉怪獸的"招式"是什麼,並使出對應"招式"化解
{
case 'R':printf("S");break; //當怪獸使用"R招"時,奧特曼使出"S招"
case 'B':printf("K");break; //當怪獸使用"B招"時,奧特曼使出"K招"
case 'L':printf("H");break; //當怪獸使用"L招"時,奧特曼使出"H招"
}
}
}