传送门

分析

我们先考虑暴力如何计算

对于S的子串SS,如果它有位置i使得SS[i] != T[i]那么我们就将两个字符之间用并查集连边

最后答案很明显就是并查集中所有边的个数

于是我们可以发现对于S[i] != T[j]衣服那个会在S的第i-j个子串连边

我们通过观察可以发现i - j = i - (m - j) +m

这是一个卷积的形式

于是我们枚举S和T中考虑的是那种字符然后卷积判断连边关系

最后进行之前说的并查集即可

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int mod = ;
const int g = ;
int fa[][];
char s[],ot[],t[];
int n,m,r[],len,N,a[],b[],G,ans[];
inline int pw(int x,int p){
int res=;
while(p){
if(p&)res=1ll*res*x%mod;
x=1ll*x*x%mod;
p>>=;
}
return res;
}
inline void ntt(int a[],int f){
register int i,j,k;
int now;
for(i=;i<n;++i)
if(i<r[i])swap(a[i],a[r[i]]);
for(i=;i<n;i<<=){
if(f==)now=g;
else now=G;
int wn=pw(now,(mod-)/(i<<));
for(j=;j<n;j+=(i<<)){
int w=,x,y;
for(k=;k<i;++k,w=1ll*w*wn%mod){
x=a[j+k],y=1ll*a[i+j+k]*w%mod;
a[j+k]=(x+y)%mod,a[i+j+k]=(x+mod-y)%mod;
}
}
}
}
inline int sf(int wh,int x){return fa[wh][x]==x?x:fa[wh][x]=sf(wh,fa[wh][x]);}
signed main(){
register int i,j,k;
int on,om;
G=pw(g,mod-);
scanf("%s",s);
scanf("%s",ot);
n=strlen(s),m=strlen(ot);
for(i=;i<m;++i)t[i]=ot[m-i-];
n--,m--;
on=n,om=m;
m+=n;
for(n=;n<=m;n<<=)len++;
for(i=;i<n;++i)r[i]=((r[i>>]>>)|((i&)<<(len-)));
for(i=om;i<=on;++i)
for(j=;j<;++j)fa[i-om][j]=j;
for(i=;i<;++i)
for(j=;j<;++j){
if(i==j)continue;
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(k=;k<=on;++k)a[k]=((s[k]-'a')==i);
for(k=;k<=om;++k)b[k]=((t[k]-'a')==j);
ntt(a,),ntt(b,);
for(k=;k<n;k++)a[k]=1ll*a[k]*b[k]%mod;
ntt(a,-);
int inv=pw(n,mod-);
for(k=;k<n;++k)a[k]=1ll*a[k]*inv%mod;
for(k=om;k<=on;++k)if(a[k]){
int x=sf(k-om,i),y=sf(k-om,j);
if(x==y)continue;
ans[k-om]++;
fa[k-om][x]=y;
}
}
for(i=om;i<=on;++i)printf("%d ",ans[i-om]);
return ;
}

最新文章

  1. Java语言的安全性的体现
  2. 使用Azure Blob存储
  3. 猜拳游戏GuessGame源码
  4. POJ 1279 Art Gallery(半平面交)
  5. UVALive 5905 Pool Construction 最小割,s-t割性质 难度:3
  6. Backbone Backbone-localStorage demo
  7. Winform XiaoCai.WinformUI 框架界面设计
  8. PERL 学习
  9. leetcode 题解: Length of Last Word
  10. Android开发中常见的设计模式
  11. 怎样使用SetTimer MFC 够具体
  12. 静态资源库CDN服务
  13. codeforces 540D 概率dp
  14. jqgrid-asp.net-mvc
  15. openstack私有云布署实践【10.1 计算nova - kxcontroller节点配置(科兴环境)】
  16. [STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD。。。
  17. HiWord()
  18. 【优秀的图片后期编辑工具】Luminar 3.1 for Mac
  19. ubuntu 16.04下源码安装opencv3.4
  20. ubuntu下修改mysql默认data路径

热门文章

  1. Ubuntu---samba(安装、配置、使用)OK
  2. 03:TPCC 基准压测my.cnf
  3. 手机页面开发的meta
  4. Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)
  5. 浅谈OPP
  6. 第二章:Android Studio概述(一)[学习Android Studio汉化教程]
  7. 5.docker学习之容器
  8. 象棋AI算法(二)
  9. 初始mysql语句
  10. 9.redis安全