题目:https://loj.ac/problem/2172

在两个序列自动机上同时走,这样暴搜。

先走字典序小的字符,一边搜一边输出,就是按字典序排序的。

方案数很多,需要高精度?空间很小,要压位。1e9的20位恰好够。

不开 n*n 的DP数组,给出现的状态分配一个位置,开 3e6 的DP数组,空间就能了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=,K=;
int n,m,c[N][K],d[N][K],lst[K];
char a[N],b[N];
int Id(char ch)
{
if(ch<='Z')return ch-'A';
return ch-'a'+;
}
char Id2(int k)
{
if(k<)return k+'A';
return k-+'a';
}
namespace S1{
int ans,top; char s[N];
void dfs(int p0,int p1)
{
printf("%s\n",s+); ans++;
for(int i=;i<;i++)
if(c[p0][i]<=n&&d[p1][i]<=m)
{
s[++top]=Id2(i);
dfs(c[p0][i],d[p1][i]);
s[top]=s[top+];top--;
}
}
void solve()
{dfs(,); printf("%d\n",ans);}
}
namespace S2{
const int M=3e6,bs=1e9;
int tot; int dy[N][N];
struct Node{
int a[];//
void Inc(int k)
{
a[]+=k;
for(int i=;i<=a[];i++)
if(a[i]>=bs)a[i]-=bs,a[i+]++;
while(a[a[]+])a[]++;
}
void Inc(Node k)
{
int lm=max(a[],k.a[]);
for(int i=;i<=lm;i++)
{
a[i]+=k.a[i];
if(a[i]>=bs)a[i+]+=a[i]/bs,a[i]%=bs;
}
while(a[a[]+])a[]++;
}
void print()
{
printf("%d",a[a[]]);
for(int i=a[]-;i;i--)
printf("%09d",a[i]);puts("");
}
}dp[M];
int dfs(int p0,int p1)
{
if(dy[p0][p1])return dy[p0][p1];
int cr=++tot; dy[p0][p1]=cr; dp[cr].Inc();
for(int i=,x,y;i<;i++)
if((x=c[p0][i])<=n&&(y=d[p1][i])<=m)
{
int v=dfs(x,y); dp[cr].Inc(dp[v]);
}
return cr;
}
void solve()
{ int v=dfs(,); dp[v].print();}
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",a+); scanf("%s",b+);
for(int i=;i<;i++)lst[i]=n+;
for(int i=n;i>=;i--)
{
for(int j=;j<;j++)
c[i][j]=lst[j];
lst[Id(a[i])]=i;
}
for(int i=;i<;i++)lst[i]=m+;
for(int i=m;i>=;i--)
{
for(int j=;j<;j++)
d[i][j]=lst[j];
lst[Id(b[i])]=i;
}
int op;scanf("%d",&op);
if(op==)S1::solve();
else S2::solve();
return ;
}

LOJ 2172 「FJOI2016」所有公共子序列问题——序列自动机的更多相关文章

  1. 【LOJ】#2172. 「FJOI2016」所有公共子序列问题

    题解 听说是什么序列自动机? 我们考虑对于每个位置的串,下面拼接相同的字符时,拼接最近的一个,这样可以保证不重不漏 为了实现这个我们需要什么呢,我们需要一个链表,记录一下每个位置的下一个字符会转移到哪 ...

  2. @loj - 2174@ 「FJOI2016」神秘数

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一个可重复数字集合 S 的神秘数定义为最小的不能被 S 的子集的 ...

  3. Loj #3056. 「HNOI2019」多边形

    Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...

  4. LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)

    题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...

  5. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  6. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  7. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  8. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  9. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

随机推荐

  1. 给python解释器本身添加注册表

    import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...

  2. js获取文件输入框的真实目录

    1.问题 页面有一个input file服务器控件,一个div,div是image标签的容器,当点击input file的值改变,我们往div里追加image标签: 但当通过js的onchange事件 ...

  3. Git读档

    $ git config --global user.name "meng kai" $ git config --global user.email 363255751@qq.c ...

  4. Django——CBV与FBV

    一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 二.CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面 ...

  5. scss-@each指令

    一.@each指令实例 在@each变量的定义,其中包含的每个项目的列表中的值. 语法: @each $var in <list or map> 语法简要说明如下. $var: 它代表了变 ...

  6. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  7. mysql什么情况下会触发表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...

  8. 日期函数new Date()浏览器兼容性问题

    项目上与时间相关的地方特别多,与时间格式相关都使用了moment.js轻量级日期处理库,在开发中出现了几次浏览器兼容性问题,所以总结一下new Date()和moment.js在各大浏览器中兼容性问题 ...

  9. (转)防止ViewPager中的Fragment被销毁的方法

    在使用ViewPager与Fragment的时候,ViewPager会自动缓存1页内的数据,如下图: 当我们当前处在页面2的时候,页面1和页面3的View实际上已经创建好了,所以在我们拖动的时候是可以 ...

  10. import模块后查找模块的绝对路径

    >>> import bsddb3>>> bsddb3.__file__'/usr/local/lib/python2.6/site-packages/bsddb3 ...