LOJ 2172 「FJOI2016」所有公共子序列问题——序列自动机
题目: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」所有公共子序列问题——序列自动机的更多相关文章
- 【LOJ】#2172. 「FJOI2016」所有公共子序列问题
题解 听说是什么序列自动机? 我们考虑对于每个位置的串,下面拼接相同的字符时,拼接最近的一个,这样可以保证不重不漏 为了实现这个我们需要什么呢,我们需要一个链表,记录一下每个位置的下一个字符会转移到哪 ...
- @loj - 2174@ 「FJOI2016」神秘数
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一个可重复数字集合 S 的神秘数定义为最小的不能被 S 的子集的 ...
- Loj #3056. 「HNOI2019」多边形
Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...
- LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)
题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
- Loj #2542. 「PKUWC2018」随机游走
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...
随机推荐
- jackson工具类有动态属性过虑功能
在业务应用中经常会有指定属性序列化json的需求,C#中这个功能很容易就可以解决:使用lambda重新构造一下匿名对象就可以了.一行代码搞定.java是这样解决的. public JsonMapper ...
- ffmpeg+cuda+opencv
为了让ffmpeg使用gpu进行解码,可以按以下步骤: 1 下载nvidia官网提供的ffmpeg,编译安装 https://developer.nvidia.com/ffmpeg 注意原来的选项上还 ...
- HexChat访问Docker频道
1.使用HexChat登录Freenode.net 2.在Freenode下输入并回车: /msg NickServ REGISTER yourpassword youremail@example.c ...
- groovy与javah互相调用
暂时只找到这几种方法.groovy代码方便灵活.常用来写一些工具.一般都是java加入groovy代码 第一种 java中加入 groovy代码就是 Toy.groovy class Toy{ def ...
- Excel&&word&&PPT
1. Excel 1.1 制作下拉框 选中单元格或列--> 菜单"数据" --> "数据验证"-->"设置" --> ...
- SpringBoot | 第三十五章:Mybatis的集成和使用
前言 最近收到公众号留言说,单纯的Mybatis的集成和使用.前面在第九章:Mybatis-plus的集成和使用介绍了基于mybatis-plus的集成和使用.后者也只是对mybatis进行了功能增强 ...
- [转]<加密算法c#>——— 3DES加密之ECB模式 和 CBC模式
本文转自:http://www.cnblogs.com/qq278360339/archive/2013/06/05/3119222.html 最近 一个项目.net 要调用JAVA的WEB SERV ...
- 堆(Heap)的实现
这次实现了堆,这个堆不是指系统堆栈的堆,是一种数据结构,见下图 堆的本质就是一个数组(上图中,红色的是值,黑色的是下标)简单的来说就是把一个数组看成是二叉树,就像上图 大堆和小堆分别是指根节点比孩子节 ...
- 2、Dubbo源码解析--服务发布原理(Netty服务暴露)
一.服务发布 - 原理: 首先看Dubbo日志,截取重要部分: 1)暴露本地服务 Export dubbo service com.alibaba.dubbo.demo.DemoService to ...
- IP:192.168.21.173 子网掩码:255.255.255.0 网关:192.168.21.2 DNS:8.8.8.8 8.8.4.4 1、设置IP地址、网关 ee /etc/rc.conf #编辑 ifconfig_em0="inet 192.168.21.173 netmask 255
IP:192.168.21.173子网掩码:255.255.255.0网关:192.168.21.2DNS:8.8.8.88.8.4.41.设置IP地址.网关ee /etc/rc.conf #编辑if ...