比赛 20120323 评测结果 AAAAAAAAAAAAAEA
题目名称 加利福尼亚旅店 最终得分 93
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-23 20:23:01
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#define Loop(a,b,c) for(int a=b;a<=c;a++)
using namespace std;

char str[100];
char cstr[60];

int str_jud(char *source,char *object,int asterisk)
{
	char *sub_sour,*sub_obje;

	sub_sour=(char *)malloc(sizeof(char)*100);
	sub_obje=(char *)malloc(sizeof(char)*100);
	strcpy(sub_sour,source);
	strcpy(sub_obje,object);

	if(*sub_obje=='*')
	{
		asterisk=1;
	}
	if(((*sub_sour=='\0')&&(*sub_obje=='\0'))||((sub_obje[1]=='\0')&&(*sub_obje=='*')))
		return 1;
	else if((*sub_sour=='\0')&&(*sub_obje!='\0'))
		return 0;
	else if(asterisk==0)
	{
		if((*sub_obje==*sub_sour)||(*sub_obje=='?'))
		{
			sub_sour++;
			sub_obje++;
			return str_jud(sub_sour,sub_obje,asterisk);
		}
		else
			return 0;
	}
	else
	{

		if(*sub_obje=='*')
		{
			sub_obje++;
		}
		asterisk=0;

		if(str_jud(sub_sour,sub_obje,asterisk))
		{
			return 1;
		}
		else
		{
			asterisk=1;
			sub_sour++;
			return str_jud(sub_sour,sub_obje,asterisk);
		}
	}
}

void init()
{
	int N;
	int Ans;
	int yes;
	scanf("%s\n",&str);
	int asterisk=0;
	while(strlen(str))
	{
		Ans=0;
		scanf("%d\n",&N);
		Loop(i,1,N)
		{
			scanf("%s\n",&cstr);
			yes=str_jud(cstr,str,asterisk);
			if(yes) Ans++;
			asterisk=0;
		}
		printf("%d\n",Ans);
		memset(str,'\0',sizeof(str));
		scanf("%s\n",&str);
	}
}

int main()
{
	freopen("hotela.in","r",stdin);
	freopen("hotela.out","w",stdout);
	init();
	return 0;
}