题目链接:戳我

蒟蒻的第一道子序列自动机!

给定两个01串A,B,求一个最短的01串,要求C不是A,B的子序列。要求如果同样短,输出字典序最小的。

那么我们先构建A,B两个串的子序列自动机。然后我们设\(f[i][j]\)表示现在已经匹配到A的第i位,B的第j位,现在还需要f[i][j]长度,才不是A,B的子序列。

那么\(f[i][j]\)从\(f[nxt_a[i][0/1]][nxt_b[i][0/1]]\)转移过来就行了。

比较重要的是如何构建出字典序最小的?

我们从x=0,y=0开始构建,每次选择ans-当前步数的状态,如果往后面接0合法,就优先接0,不行再接1.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define MAXN 4010
#define INF 0x3f3f3f3f
using namespace std;
int lena,lenb,ans;
int cur[2],nxt_a[MAXN][2],nxt_b[MAXN][2],f[MAXN][MAXN];
char a[MAXN],b[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%s",a+1),scanf("%s",b+1);
lena=strlen(a+1),lenb=strlen(b+1);
cur[0]=lena+1,cur[1]=lena+1;
for(int i=lena;i>=0;i--)
{
nxt_a[i][0]=cur[0],nxt_a[i][1]=cur[1];
if(i!=0) cur[a[i]-'0']=i;
}
cur[0]=lenb+1,cur[1]=lenb+1;
for(int i=lenb;i>=0;i--)
{
nxt_b[i][0]=cur[0],nxt_b[i][1]=cur[1];
if(i!=0) cur[b[i]-'0']=i;
}
f[lena+1][lenb+1]=0;
nxt_a[lena+1][0]=lena+1,nxt_a[lena+1][1]=lena+1;
nxt_b[lenb+1][0]=lenb+1,nxt_b[lenb+1][1]=lenb+1;
for(int i=lena+1;i>=0;i--)
for(int j=lenb+1;j>=0;j--)
{
if(i==lena+1&&j==lenb+1) continue;
f[i][j]=INF;
f[i][j]=min(f[i][j],f[nxt_a[i][0]][nxt_b[j][0]]+1);
f[i][j]=min(f[i][j],f[nxt_a[i][1]][nxt_b[j][1]]+1);
}
ans=f[0][0];
int x=0,y=0;
for(int i=1;i<=ans;i++)
{
if(f[nxt_a[x][0]][nxt_b[y][0]]==ans-i)
{
printf("0");
x=nxt_a[x][0],y=nxt_b[y][0];
continue;
}
if(f[nxt_a[x][1]][nxt_b[y][1]]==ans-i)
{
printf("1");
x=nxt_a[x][1],y=nxt_b[y][1];
}
}
return 0;
}

noi.ac#458 sequence的更多相关文章

  1. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  2. NOI.ac #31 MST DP、哈希

    题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...

  3. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

  4. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  5. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  6. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  7. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  8. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

  9. NOI.AC WC模拟赛

    4C(容斥) http://noi.ac/contest/56/problem/25 同时交换一行或一列对答案显然没有影响,于是将行列均从大到小排序,每次处理限制相同的一段行列(呈一个L形). 问题变 ...

随机推荐

  1. Keepalive+双主

    一.建立3台服务器之间ssh互信在mydb1,mydb2,mydb3服务器上分别执行:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192. ...

  2. element-ui tree控件获取当前节点和父节点

    今天使用element-ui 遇到两个问题,第一个问题是获取tree控件的当前节点和父节点, 一开始使用tree控件的getCurrentNode()函数,结果发现返回的是当前节点的data属性,和u ...

  3. 在Windows平台上运行Tomcat

    从之前的学习中知道,可以调用Bootstrap类将Toomcat作为一个独立的应用程序来运行,在Windows平台上,可以调用startup.bat批处理文件来启动Tomcat,或运行shutdown ...

  4. Struts2 流程原理

    一.流程图 (转) 二.流程详解 1.服务器传递来的请求,通过ActionContextClearUp.other filters.最后到达StrutsPrepareAndExecuteFilter ...

  5. HTML——form表单中常用标签 form input (text hidden password radio checkbox reset submit ) select(option)总结

    <form action="" method="get"> <!-- placeholder="请输入文本" 显示提示 r ...

  6. C#面向对象14 List泛型集合/装箱和拆箱/字典集合(Dictionary)

    1.List泛型集合 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  7. cookie转换成字典类型方便scraoy 使用

    #bakooie装换成紫电模式方便scrapy使用 cookid = "_ga=GA1.2.1937936278.1538889470; __gads=ID=1ba11c2610acf504 ...

  8. 解决:Nginx访问静态页面出现中文乱码

    需要修改nginx的server的配置内容,增加一行:charset utf-8; 详情如下: upstream you.domainName.com { server 127.0.0.1:8080; ...

  9. ssh登录缓慢,使用ssh -v登录后,显示在 “pledge: network” 处卡顿:

    当登录一台服务器时,每次输入密码之后都要等很久才会得到命令提示符,尝试修改了sshd_config中的UseDNS no,但效果依然不好. ssh -v 192.168.12.43 This is p ...

  10. ubuntu16.04环境LNMP实现PHP5.6和PHP7.2

    最近因为公司突然间说要升级php7,所以做个记录 PPA 方式安装 php7.2 : sudo apt-get install software-properties-common 添加 php7 的 ...