题目链接:http://poj.org/problem?id=1126
这个题给出几条语法要求,让我们判断词汇是否符合语法要求,大概可以描述成:
1.单个从p到z的字符满足条件;
2.如果字符串s(注意是字符串,我现开始以为是字母s)满足条件,Ns也满足条件。
3.如果字符串s和字符串t满足条件,Cst,Dst,Est,Ist也满足条件。
思路是这样的,给每一个字母一个值,由后往前,类似递归的查看方式,倒推出这一个字符串是否符合,若结果为-1,则正好满足题目要求的嵌套方式,输出yes。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int main() { char data[260]; int i,top,list[260]; bool flag; while(cin>>data) { top=strlen(data)-1; flag=1; for(i=0;i<=top;i++) { if(data[i]=='N') list[i]=1; else if(data[i]=='C'||data[i]=='D'||data[i]=='E'||data[i]=='I') list[i]=2; else if(data[i]>='p'&&data;[i]<='z') list[i]=-1; else { flag=0; break; } } if(flag==0) cout<<"NO"<<endl; else { int sum=0; while(top>=0) { sum+=list[top]; if(sum>0) break; if(list[top]>0) sum--; top--; } if(sum==-1) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } }
|