比赛 20100927 评测结果 AAAAAAAAAAAAAAAA
题目名称 翻译玛雅著作 最终得分 100
用户昵称 Pom 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-09-27 20:26:45
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>

using namespace std;

int n,m,i,j,k,g[60],now[60],ko,ans,tot=0;
char st[3000003],s[3005],ch;
bool b[60];

inline int ex(char c)
{
	if (c<='Z') return (int) c-64;
	return (int) c-67;
}

void init()
{
	freopen("writing.in","r",stdin);
	freopen("writing.out","w",stdout);
	scanf("%d%d",&m,&n);
	for (i=1;i<=m;i++)
	{
		for (;;)
		{
			scanf("%c",&ch);
			if ((ch<='z' && ch>='a')||(ch<='Z' && ch>='A')) 
			{
				s[i]=ch;
				break;
			}
		}
	}
	for (i=1;i<=n;i++)
	{
		for (;;)
		{
			scanf("%c",&ch);
			if ((ch<='z' && ch>='a')||(ch<='Z' && ch>='A')) 
			{
				st[i]=ch;
				break;
			}
		}
	}
	memset(g,0,sizeof(g));
	memset(now,0,sizeof(0));
	ko=0;
	for (i=1;i<=m;i++)
	{
		g[ex(s[i])]++;
		if (!b[ex(s[i])])
		{
			tot++;
			b[ex(s[i])]=true;
		}			
		now[ex(st[i])]++;
	}
	for (i=1;i<=60;i++)
		if (now[i]>=g[i] && g[i]) ko++; 
}

void solve()
{
	for (i=m+1;i<=n;i++)
	{
		if (ko==tot) ans++;
		now[ex(st[i-m])]--;
		if (now[ex(st[i-m])]==g[ex(st[i-m])]-1) ko--;
		now[ex(st[i])]++;
		if (now[ex(st[i])]==g[ex(st[i])]) ko++;
	}
	if (ko==tot) ans++;
	printf("%d\n",ans);
}

int main()
{
	init();
	solve();
	return 0;
}