题意:
给字符串s判断是否符合文法X->CXX|DXX|EXX|IXX|NX|p~z。
分析:
线性文法直接归约就好。
代码;
//poj 1126
//sep9
#include <iostream>
#include <string>
using namespace std;
char s[300];
bool solve()
{
_strrev(s);
int cnt=0;
for(int i=0;s[i];++i){
if(s[i]>='p'&&s[i]<='z')
++cnt;
else if(s[i]=='N'){
if(cnt==0)
return false;
}else if(s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='I'){
--cnt;
if(cnt==0)
return false;
}else
return false;
}
return cnt==1;
}
int main()
{
while(scanf("%s",s)==1){
if(solve())
puts("YES");
else
puts("NO");
}
return 0;
}