Description

很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n。可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺。
你想对这两个串重新进行匹配,其中A为模板串,那么现在问题来了,请回答,对于B的每一个位置i,从这个位置开始连续m个字符形成的子串是否可能与A串完全匹配?

Input

第一行包含两个正整数m,n(1<=m<=n<=300000),分别表示A串和B串的长度。
第二行为一个长度为m的字符串A。
第三行为一个长度为n的字符串B。
两个串均仅由小写字母和*号组成,其中*号表示相应位置已经残缺。

Output

第一行包含一个整数k,表示B串中可以完全匹配A串的位置个数。
若k>0,则第二行输出k个正整数,从小到大依次输出每个可以匹配的开头位置(下标从1开始)。

Sample Input

3 7
a*b
aebr*ob

Sample Output

2
1 5

HINT

Source

By Claris

orz fft 字符串匹配  好那么

如果把两个串’*’的部分当成0那么 有如下公式 $\sum\limits_{i} (a[i]-b[i])^{2}*a[i]*b[i]=0$ 这个为什么一定要平方 因为有可能存在一些情况 比如 前面是负数然后后面是整数结果我这里恰好加成0了但是显然是不匹配的.. 然后针对这个式子把a反转一下 然后公式写出来化简一下发现是卷积形式 所以就fft一下 最后看一下每位上是否为0 即可

 

分类: fft

elijahqi

辣鸡蒟蒻一枚qwq 欢迎加qq qwq 2922945330

发表评论

电子邮件地址不会被公开。 必填项已用*标注