原题链接
考察:模拟
思路:
??坑点比较多:
(1) 判断不符合语法的单词
(2) 只允许存在一个名词
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010,M = 10;
string s[N];
int n,cnt[N];
string gender[M] = {"etr","lios","initis","etra","liala","inites"};
bool check_gen()
{
int l = 0,r = 0,cs = 0;
memset(cnt,-1,sizeof cnt);
for(int i=0;i<n;i++)
{
for(int j=0;j<6;j++)
if(s[i].size()>=gender[j].size())
{
string it = s[i].substr(s[i].size()-gender[j].size(),gender[j].size());
if(it!=gender[j]) continue;
cnt[i] = j;
if(j<3) l++;
else r++;
break;
}
if(cnt[i]==-1) return 0;
}
if(cnt[0]==-1) return 0;
if(n==1&&cnt[0]!=-1) return 1;
if(l&&r) return 0;
l = 0,r = 0;
for(int i=0;i<n;i++)
if(!cnt[i]||cnt[i]==3) l++,r = i;
if(l!=1) return 0;
for(int i=0;i<r;i++)
if(cnt[i]!=1&&cnt[i]!=4) return 0;
for(int i=r+1;i<n;i++)
if(cnt[i]!=2&&cnt[i]!=5) return 0;
return 1;
}
int main()
{
while(cin>>s[n]) n++;
printf("%s\n",check_gen()?"YES":"NO");
return 0;
}