记录编号 363417 评测结果 AAAAAAAAAAA
题目名称 [BZOJ 4503] 你猜是不是KMP 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 1.698 s
提交时间 2017-01-11 12:48:47 内存使用 0.80 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<bitset>
using namespace std;
const int N=1e5+10;
int n,m,last[26];
char s[N],t[N];
bitset<N> pos[26],ans;
int main()
{
	freopen("guess.in","r",stdin);
	freopen("guess.out","w",stdout);
	scanf("%s%s",s,t);
	n=strlen(s);
	m=strlen(t);
	for (int i=0;i<n;i++)
		ans[i]=pos[s[i]-'a'][i]=1;
	for (int i=0;i<m;i++)
	if (t[i]!='?'){
		int now=t[i]-'a';
		pos[now]>>=i-last[now];
		ans&=pos[now];
		last[now]=i;
	}
	int sum=0;
	for (int i=0;i<=n-m;i++) sum+=ans[i];
	printf("%d\n",sum);
	for (int i=0;i<=n-m;i++)
	if (ans[i]) printf("%d\n",i);
	return 0;
}