社区讨论
蒟蒻关于这题序列自动机做法的一个疑问
P1819公共子序列参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo3bypnl
- 此快照首次捕获于
- 2023/10/24 04:08 2 年前
- 此快照最后确认于
- 2023/10/24 04:08 2 年前
想问一下加注释的这句话为什么不是if(x&&y&&z)
不应该是x,y,z同时不为0时才是找到了一个公共子序列吗,才应该自增1吗
求教谢谢
CPP#include<bits/stdc++.h>
#define int long long
#define inf 1e18
#define inc 0xcfcfcfcf
#define N 157
#define M 27
#define mod 100000000
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
using namespace std;
int T=1,n,ecnt;
string a,b,c;
int la,lb,lc;
int nxta[N][M],nxtb[N][M],nxtc[N][M];
int f[N][N][N];
void Init_nxt(int nxt[N][M],int len,string x)
{
for(int i=len-1;i>=0;--i)
{
for(int j=0;j<26;++j)
nxt[i][j]=nxt[i+1][j];
nxt[i][x[i+1]-'a']=i+1;
}
}
int Dfs(int x,int y,int z)
{
if(f[x][y][z]) return f[x][y][z];
if(x||y||z)
++f[x][y][z];
for(int i=0;i<26;++i)
if(nxta[x][i]&&nxtb[y][i]&&nxtc[z][i])
f[x][y][z]=(f[x][y][z]+Dfs(nxta[x][i],nxtb[y][i],nxtc[z][i]))%mod;
return f[x][y][z]%mod;
}
bool Solve()
{
//freopen("test.in","r",stdin);
scanf("%lld",&n);
cin>>a>>b>>c;
la=a.size(),lb=b.size(),lc=c.size();
a=" "+a,b=" "+b,c=" "+c;
Init_nxt(nxta,la,a);
Init_nxt(nxtb,lb,b);
Init_nxt(nxtc,lc,c);
printf("%lld\n",Dfs(0,0,0)%mod);
return true;
}
signed main()
{
//scanf("%lld",&T);
while(T--)
if(!Solve())
printf("-1\n");
return 0;
}
/*
*/
回复
共 4 条回复,欢迎继续交流。
正在加载回复...