【BZOJ】3214: [Zjoi2013]丽洁体
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3214
字符串长度最大不超过$5$直接$HASH$起来
首先在$T$中考虑找到最前的一个包含$A$的子序列,找到最后的一个包含$C$的子序列,直接贪心的确定了$A,C$的位置。
在剩下的区间内$DP$出最合适的$B$的位置。
我们要找到一个区间${[l,r]}$使得$B$是它的子序列,显然应该最小化$r-l$。
令$F[i]$表示$B$中第$i$单词最晚出现的位置。
$g[i]$表示$B$中第$i$单词已经出现过了之后最少要删除多少个单词(答案)。
假设当前在T中的第$i$个单词是B中的第$x$个。
如果$x=1$:${f[1]=1,g[1]=0}$
如果${f[x-1]!=0}$(即出现过了):${f[x]=i,g[x]=g[x-1]+i-f[x-1]-1}$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<map>
using namespace std;
#define maxn 100100
#define llg long long
#define inf (llg)1e16
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,ans,sum,g[maxn],f[maxn]; llg lena,lenb,lenc,a[maxn],b[maxn],c[maxn],s[maxn];
vector<llg>p[]; void get_(llg *a,llg &n)
{
llg x=; char ch=getchar();
for (; ch!='\n'; ch=getchar())
if (ch>='a' && ch<='z') x=x*+ch-'a'+; else
if (x){ a[++n]=x; x=; }
if (x) a[++n]=x;
} int main()
{
yyj("ti");
get_(s,n);
get_(a,lena);
get_(b,lenb);
get_(c,lenc);
llg l=,r=n+;
for (llg i=;i<=lena;i++)
{
l++;
while (a[i]!=s[l]) l++,sum++;
}
for (llg i=lenc;i>=;i--)
{
r--;
while (s[r]!=c[i]) r--,sum++;
}
l++; r--;
for (llg i=;i<=lenb;i++) p[b[i]].push_back(i);
for (llg i=;i<=lenb;i++) g[i]=inf;
ans=inf;
for (llg i=l;i<=r;i++)
{
llg w=p[s[i]].size();
for (llg k=w-;k>=;k--)
{
llg x=p[s[i]][k];
if (x==) continue;
if (x==) {f[]=i; g[]=;}
else
{
if (f[x-])
{
f[x]=i; g[x]=g[x-]+i-f[x-]-;
}
}
ans=min(ans,g[lenb]);
}
}
cout<<ans+sum;
return ;
}
【BZOJ】3214: [Zjoi2013]丽洁体的更多相关文章
- bzoj 3214: [Zjoi2013]丽洁体
Description 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿 写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做 ...
- [BZOJ3214][ZJOI2013]丽洁体(Hash+DP)
3214: [Zjoi2013]丽洁体 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 906 Solved: 335[Submit][Status] ...
- [luogu] P3333 [ZJOI2013]丽洁体(贪心)
P3333 [ZJOI2013]丽洁体 题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在 ...
- [ZJOI2013]丽洁体
题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其 ...
- BZOJ3214 [Zjoi2013]丽洁体
题意 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其它题 ...
- 并不对劲的bzoj3214:p3333:[ZJOI2013]丽洁体
题目大意 有三个由若干个单词组成的字符串\(T,A,B,C(|T|,|A|,|B|,|C|\leq 5*10^4,单词长度\leq5,每个单词出现次数\leq500)\) 求从\(T\)中至少删去多少 ...
- [ZJOI 2013]丽洁体
Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...
- BZOJ 3110: [Zjoi2013]K大数查询 [树套树]
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6050 Solved: 2007[Submit][Sta ...
- 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 & 3236 [Ahoi2013] 作业 题解
[原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 978 Solved: 476 Descri ...
随机推荐
- bzoj4444 国旗计划
题目链接 倍增,预处理出每个点往后$2^i$个应该选哪个人 我用的treap就是快 #include<algorithm> #include<iostream> #includ ...
- pytest+request 接口自动化测试
1.安装python3brew update brew install pyenv 然后在 .bash_profile 文件中添加 eval “$(pyenv init -)” pyenv insta ...
- 如何用git将项目代码上传到github
注册账户以及创建仓库 要想使用github第一步当然是注册github账号了.之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之 ...
- 11:vue-cli脚手架
1.1 vue-cli基本使用 官网: https://github.com/vuejs/vue-cli 1.简介 vue-cli 是一个vue脚手架,可以快速构造项目结构 vue-cli 本身集成了 ...
- Python3.6.2在线安装pymysql模块
我是一个python新手刚才使用python写邮件发送代码的时候想着需要连接数据库, 下面的安装步骤 python -m pip install pymysql PS C:\Users\hp> ...
- [BeiJing wc2012]冻结 题解
HYSBZ - 2662 这个题如果我们先想用平常的方法来建图,因为我们无法确定是否使用卡片,如果我们每个点每个边都建图,那么非常耗时占空间:注意到k是比较小的,所以我们可以把k拆开,把一个点分为k个 ...
- Java开发人员必会的基本Linux命令(转)
原文链接:http://www.cnblogs.com/zhuawang/p/5212809.html http://explainshell.com/ 本文并不会对所有命令进行详细讲解,只给出常见用 ...
- 清理sqlserver 2012 日志文件
http://www.cnblogs.com/q149072205/p/4380944.html 1.先把数据库设置为简单模式(右击数据库名->点'属性'->点'选项'->恢复模式改 ...
- memalign的作用【转】
本文转载自:https://blog.csdn.net/lvwx369/article/details/41726415 转自:http://hi.baidu.com/narshben/item/ca ...
- CentOS 安装 MongoDB
一.安装mongodb 本文介绍的安装方式是以二进制方式离线安装,相当于windows"绿色"安装版本的概念. 下载mongodb: # https://www.mongodb.c ...