模拟,主要就是字符串操作,这方面还是JAVA方便点,C++没有顺手的string API,按规则细心点写就行了,逻辑搞清楚就能过
import java.util.Scanner;
public class Main
{
static boolean isSlump(String s)
{
if (s.startsWith("DF") || s.startsWith("EF"))
{
int i;
for (i = 2; i < s.length() && s.charAt(i) == 'F'; i++)
;
if (i == s.length())
return false;
else
{
String sub = s.substring(i);
if (sub.equals("G"))
return true;
else
return isSlump(sub);
}
}
return false;
}
static boolean isSlimp(String s)
{
if (s.length() == 2)
return s.equals("AH");
else
{
if (s.startsWith("AB") && s.endsWith("C"))
return isSlimp(s.substring(2, s.length() - 1));
else if (s.startsWith("A") && s.endsWith("C"))
return isSlump(s.substring(1, s.length() - 1));
else
return false;
}
}
static boolean isSlurpy(String s)
{
int c = s.lastIndexOf('C');
if (c == -1)
return s.length() > 2 && s.startsWith("AH")
&& isSlump(s.substring(2));
else
return isSlimp(s.substring(0, c + 1))
&& isSlump(s.substring(c + 1));
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("SLURPYS OUTPUT");
int n = sc.nextInt();
sc.nextLine();
while (n-- > 0)
System.out.println(isSlurpy(sc.nextLine()) ? "YES" : "NO");
System.out.println("END OF OUTPUT");
sc.close();
}
}