洛谷P3856题解
题目描述
求
题解
序列自动机模板题。
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,k,x[105][30],y[105][30],z[105][30];
ll f[105][105][105];
char a[105],b[105],c[105];
ll dfs(int u,int v,int w)
{
ll res=1;
if(f[u][v][w]!=-1)
return f[u][v][w];
for(int i=1;i<=26;i++)
{
if(x[u][i]&&y[v][i]&&z[w][i])
res+=dfs(x[u][i],y[v][i],z[w][i]);
}
return f[u][v][w]=res;
}
void pre(int t,int p[105][30],char s[105])
{
for(int i=t-1;i>=0;i--)
{
for(int j=1;j<=26;j++)
p[i][j]=p[i+1][j];
p[i][s[i+1]-96]=i+1;
}
}
int main()
{
memset(f,-1,sizeof(f));
scanf("%s%s%s",a+1,b+1,c+1);
pre(strlen(a+1),x,a);
pre(strlen(b+1),y,b);
pre(strlen(c+1),z,c);
printf("%lld\n",dfs(0,0,0)-1);
return 0;
}