noi.ac#458 sequence
题目链接:戳我
蒟蒻的第一道子序列自动机!
给定两个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的更多相关文章
- # NOI.AC省选赛 第五场T1 子集,与&最大值
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
- NOI.ac #31 MST DP、哈希
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
- NOI.AC WC模拟赛
4C(容斥) http://noi.ac/contest/56/problem/25 同时交换一行或一列对答案显然没有影响,于是将行列均从大到小排序,每次处理限制相同的一段行列(呈一个L形). 问题变 ...
随机推荐
- MySQ-表关系-外键-修改表结构-复制表-03
目录 前言 不合理的表结构(案例) 带来的问题 如何解决问题? 如何确定表关系? 表关系 一对多 多对多 一对一 应用场景 判断表关系最简单的语法 三种关系常见案例 如何建立表关系? 外键 forei ...
- Jmeter之TCP取样器
1.在线程组中添加“TCP取样器” 2.填写数据 以下截图是必须配置的 TCPClient classname: 填写TCP报文格式(有三类),默认前缀:org.apache.jmeter.prot ...
- Spring Boot源码分析-配置文件加载原理
在Spring Boot源码分析-启动过程中我们进行了启动源码的分析,大致了解了整个Spring Boot的启动过程,具体细节这里不再赘述,感兴趣的同学可以自行阅读.今天让我们继续阅读源码,了解配置文 ...
- Asp.net core Identity + identity server + angular + odata + 权限管理
今天踩了一个坑. 网站发布后看到了一个 error Refused to execute inline script because it violates the following Content ...
- oracle建表详细信息
一张用户表 -- Create table create table OA_DM.DM_GY_USER ( ), username ) not null, loginname ) not null, ...
- spring jpa 学习笔记(一) 之集成
一.pom 配置 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apa ...
- date和time
time和date两个函数在Lua中实现所有的时钟查询功能.函数time在没有参数时返回当前时钟的数值. t=os.date()print(t) 05/07/19 16:49:18 --------- ...
- JSON函数表
jsoncpp 主要包含三个class:Value.Reader.Writer.注意Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序是用 Unicode 编码的,最好加一个 ...
- Access to XMLHttpRequest at 'http://localhost:8090/user/getotp' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ajax跨域请求错误 解决: springboot中: 加注解 @CrossOrigin
- Nginx作为静态资源web服务之文件读取
Nginx作为静态资源web服务之文件读取 文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动 ...