一个叫"one"的物体跟它的朋友"puton"交流是很有趣的。"One"能说单词"out"和"output",此外还能叫出它的朋友的名字。"Puton"能说的词为"in","input","one",它们互相沟通得很好,现把对话写成为字符串(不含空格)。
现有N个字串, 其中一部分是它们的对话。你要知道,每一个对话都是很重要的。空行也是很重要的。请从其中找出重要的字符串。
input:
在第一行有一个非负整数(N <= 1000),接下来N行为字符串。每一个字符串包含小写字母。所有字符串的总长度不超过10^7个字符。
output:
输出包含N行。假如字符串是重要的,输出"YES",否则输出"NO"。
input:
6
puton
inonputin
oneputonininputoutoutput
oneininputwooutoutput
outpu
utput
output:
YES
NO
YES
NO
NO
NO【参考程序】:
#include<iostream>
#include<cstring>
using namespace std;
char str[7][10]={"","out","output","puton",
"in","input","one"};
int len[7]={0,3,6,5,2,5,3};
bool bo[8000001];
char ss[8000001];
int n;
bool tf(int x,char *y)
{
for (int i=x,j=strlen(y)-1;j>=0;j--,i--)
if (ss[i]!=y[j]) return false;
return true;
}
int main()
{
scanf("%d\n",&n);
for (int k=1;k<=n;k++)
{
gets(ss);
int ls=strlen(ss);
memset(bo,false,sizeof(bo));
bo[0]=true;
for (int i=0;i<ls;i++)
{
for (int j=1;j<=6;j++)
if (i+1>=len[j])
{
if (tf(i,str[j]))
if (bo[i+1-len[j]])
bo[i+1]=true;
}
}
if (bo[ls]) printf("YES\n");
else printf("NO\n");
}
return 0;
}