题目: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. JUnit异常断言

    使用Junit时,有多种方式来进行异常的断言 ExeceptedException & @Rule,可以同时断言异常类型和消息 public class ExpectedExceptionsT ...

  2. 015-GenericEncodingFilter模板【解决全局乱码】

    package ${enclosing_package}; import java.io.IOException; import java.io.UnsupportedEncodingExceptio ...

  3. FileZilla的使用(包括Server和Client两个程序)

    1.安装 FileZillaServer和FileZillaClient,到官网去下载 https://filezilla-project.org/ 2.启动 FileZillaServer 它会提示 ...

  4. 【Ubuntu】设置静态ip地址

    一.Ubuntu16.04设置静态IP1.获取网卡的名字   ip route show 2.获取网卡的名字 vim /etc/network/interfaces auto ens33 iface ...

  5. [转]Oracle ROWNUM用法和分页查询总结

    本文转自:http://blog.csdn.net/fw0124/article/details/42737671 ****************************************** ...

  6. 线程操作之Thread类

    在.Net fremework 中,所有与线程有关的操作都封装在System.Thread命名空间中, 所以在操作线程时,要先引入次命名空间 Thread类的常用方法 Abort 线程终止 Join ...

  7. 迟到的UED(转发)

    2013UCAN用户体验设计论坛–精彩视频赏析 - 交互设计 博文 视觉设计 | TaoBaoUEDhttp://ued.taobao.org/blog/2013/09/2013ucan/

  8. C# ADO.NET

    ADO.NET 作业总结难点 数据库语句掌握太差 //查询 select * from Users //查询表中所有数据 select * from Users where UserName = 'l ...

  9. XHR的应用场景

    一.简史 IE5.5最早实现XHR,需要通过ActiveXObject创建xhr实例,直到IE7才定义了XMLHttpRequest对象.IE5.5实现XHR之后,其他浏览器紧随其后实现了XHR,直接 ...

  10. HihoCoder#1279 : Rikka with Sequence(dp 枚举子集 二进制 神仙题)

    题意 题目链接 Sol 不愧是dls出的比赛啊,265个交了题的人只有8个有分Orz 做完这题,,感觉自己的位运算dp姿势升华了... 首先最裸的dp应该比较好想,设\(f[i][j][k]\)表示前 ...