比赛 |
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;
}