记录编号 37434 评测结果 AAWAAAAAAWWAA
题目名称 加利福尼亚旅店 最终得分 76
用户昵称 GravatarTruth.Cirno 是否通过 未通过
代码语言 C++ 运行时间 0.032 s
提交时间 2012-03-29 22:07:54 内存使用 0.27 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main(void)
{
	freopen("hotela.in","r",stdin);
	freopen("hotela.out","w",stdout);
	int i,j,k,n,c,lc,minlc,lt;
	char core[52],tar[52];
	bool f[52][52];
	while (cin.peek()!=EOF)
	{
		c=0;
		scanf("%s\n",&core);
		lc=strlen(core);
		for (i=1;i<lc;i++)
			if (core[i-1]=='*'&&core[i]=='*')
			{
				for (j=i;j<lc;j++)
					core[j-1]=core[j];
				lc--;
				i--;
			}
		minlc=0;
		for (i=0;i<lc;i++)
			if (core[i]!='*')
				minlc++;
		scanf("%d\n",&n);
		for (i=1;i<=n;i++)
		{
			scanf("%s\n",&tar);
			lt=strlen(tar);
			if (lt<minlc)
				continue;
			f[0][0]=true;
			for (j=1;j<=lc;j++)
				for (k=1;k<=lt;k++)
				{
					if (core[j-1]!='*'&&core[j-1]!='?')
						f[j][k]=f[j-1][k-1]&&(core[j-1]==tar[k-1]);
					else if (core[j-1]=='?')
						f[j][k]=f[j-1][k-1];
					else// if (core[j-1]=='*')
						f[j][k]=f[j-1][k-1]||f[j][k-1];
				}
			if (f[lc][lt]==1)
				c++;
		}
		printf("%d\n",c);
	}
	return(0);
}