[BZOJ3214][ZJOI2013]丽洁体(Hash+DP)
3214: [Zjoi2013]丽洁体
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 906 Solved: 335
[Submit][Status][Discuss]Description
平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子。这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中。许多同学都喜欢做这种题,因为较其它题显得有趣。仿写的句子往往具有“A__B__C”的形式,其中A,B,C是给定的由一个或多个单词组成的短句,空的部分需要学生填写。当然,考试的时候空在那里也是可以的。例如,“其实天不暗阴云终要散,其实 ,其实 ,其实路不远一切会如愿,艰难困苦的日子里我为你祈祷,请你保重每一天”。再比如,“见了大海的汹涌,没见过大山的巍峨,真是遗憾;见了大山的巍峨,没见过 ,还是遗憾。出发吧,永远出发。 ,人有不老的心情。”由于现在是网络时代,我们不再只能仿写命题人命的题,我们可以仿写网上各种句子和段落。2011年3月26日,某人在博客上发布了的消息就惹来了很多人的仿写。很难过吧。。。考得完爆了。。。。。。。。。其实也没什么可以说的。。。都是蒟蒻的借口罢了。。。。。。自己果然还只是半吊子水平呢。。。。。。。祝大家都能进省队。。。其实只要不要有遗憾就好了呢。。。虽然我很遗憾或许不能走下去了。。。。。886在网络上广泛流传的仿写,因为在某些地方有独到之处,大都被命名为“某某体”。打开人人,刷新微博,你也能发现这样和那样的体,比如,对不起体,**说明他爱你体等等。金先生注意到了这一现象,他敏锐地认为这是一个很有价值的研究课题,于是就其展开研究,打算发一篇paper。由于在网上发消息,人们有了更大的灵活度,人们有时因为表达的需要,还往原本固定的A, B, C中添加一些修饰的词语。这就给辨别一个句子或段落是否是另一个句子或段落的仿写增加了困难。金先生现在研究一种形如“A*B*C”的体作品,其中A, B, C分别是某个由若干单词组成的短句,*代表0个或多个单词。他在网上找了大量的体作品,不过很多体作品不太合乎原作者的格式,也就是相当于在正规的体作品中插入了0个或多个单词。由于数据量太大,金先生无法一个一个看过去,于是想请你帮忙,去掉尽量少的单词,使它成为指定的体。Input
包含4行。第一行是某个也许不规范的体作品T,接下来三行分别代表A, B, C。1≤|T|, |A|, |B|, |C|≤50000;所有单词长度不超过5,出现次数不超过500;数据保证答案总存在Output
仅一行,包含一个数,即最少的去除单词数。Sample Input
xiang yao yi zhi ai zhe
mou wu de hua yi yao guai zhi si lai shuo tai chang le xiang yao shi
xian yi qie meng xiang de hua yi ren lei zhi sheng lai shuo tai duan le
yao
tai chang le yao
tai duan leSample Output
2
【样例说明】
在上述样例中,不规范的体作品为:“想要一直爱着某物的话,以妖怪之死来说太长了;想要实现一切梦想的话,以人类之生来说太短了”。
规范的体形如:“要*太长了要*太短了”。
修改后的规范的体为:“要一直爱着某物的话,以妖怪之死来说太长了;要实现一切梦想的话,以人类之生来说太短了”。HINT
Source
单词长度不超过5显然就是给我们哈希的,这样就成了字符匹配问题了。
“A和C贪心即可,B在中间枚举搞一搞就好了”
然而发现并不会搞一搞。
f[i]表示到当前为止最靠右的b[i]在哪里,g[i]表示到此为止最少要删多少个单词,每次转移更新一次答案,正确性不难证。
感觉就是先想出一个感觉很不靠谱的做法,然后证明它是靠谱的。
拉链哈希很不熟啊。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std; const int N=,inf=0x3f3f3f3f,P=;
int n,la,lb,lc,i,j,k,l,r,nd,sum,ans=inf,s[N],a[N],b[N],c[N];
int v[N],nxt[N],Nxt[N],h[N],H[P],f[N],g[N]; int Hash(int x){
int y=H[x%P];
while (v[y]!=x && y) y=Nxt[y];
if (v[y]==x) return y;
v[++nd]=x; Nxt[nd]=H[x%P]; H[x%P]=nd;
return nd;
} int find(int x){
int y=H[x%P];
while (v[y]!=x && y) y=Nxt[y];
return y;
} void getstr(int s[],int &n){
int x=; char ch=getchar();
for (; ch!='\n'; ch=getchar())
if (ch>='a' && ch<='z') x=x*+ch-'a';
else s[++n]=x,x=;
if (x) s[++n]=x;
} int main(){
freopen("bzoj3214.in","r",stdin);
freopen("bzoj3214.out","w",stdout);
getstr(s,n); getstr(a,la); getstr(b,lb); getstr(c,lc);
for (i=; i<=lb; i++) k=Hash(b[i]),nxt[i]=h[k],h[k]=i;
for (l=i=; i<=la; l++) if (s[l]==a[i]) i++; else sum++;
for (r=n,i=lc; i; r--) if (s[r]==c[i]) i--; else sum++;
memset(g,0x3f,sizeof(g));
for (i=l; i<=r; i++){
for (j=h[find(s[i])]; j; j=nxt[j])
if (j==) f[]=i,g[]=;
else if (f[j-]) f[j]=i,g[j]=g[j-]+i-f[j-]-;
ans=min(ans,g[lb]);
}
printf("%d\n",ans+sum);
return ;
}
[BZOJ3214][ZJOI2013]丽洁体(Hash+DP)的更多相关文章
- BZOJ3214 [Zjoi2013]丽洁体
题意 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其它题 ...
- [luogu] P3333 [ZJOI2013]丽洁体(贪心)
P3333 [ZJOI2013]丽洁体 题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在 ...
- 并不对劲的bzoj3214:p3333:[ZJOI2013]丽洁体
题目大意 有三个由若干个单词组成的字符串\(T,A,B,C(|T|,|A|,|B|,|C|\leq 5*10^4,单词长度\leq5,每个单词出现次数\leq500)\) 求从\(T\)中至少删去多少 ...
- 【BZOJ】3214: [Zjoi2013]丽洁体
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3214 字符串长度最大不超过$5$直接$HASH$起来 首先在$T$中考虑找到最前的一个包含 ...
- [ZJOI2013]丽洁体
题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其 ...
- bzoj 3214: [Zjoi2013]丽洁体
Description 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿 写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做 ...
- [ZJOI 2013]丽洁体
Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...
- [CQOI2014][bzoj3507] 通配符匹配 [字符串hash+dp]
题面 传送门 思路 0x01 KMP 一个非常显然而优秀的想法:把模板串按照'*'分段,然后对于每一段求$next$,'?'就当成可以对于任意字符匹配就行了 对于每个文本串,从前往后找第一个可以匹配的 ...
- bzoj 3197 [Sdoi2013]assassin(Hash+DP+KM)
Description Input Output Sample Input 4 1 2 2 3 3 4 0 0 1 1 1 0 0 0 Sample Output 1 HINT [思路] Hash,D ...
随机推荐
- UITableView---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/C ...
- cocos2dx中启用lua脚本
AppDelegate 的 applicationDidFinishLaunching 方法中加载Lua引擎 bool AppDelegate::applicationDidFinishLaunchi ...
- Java面向对象的三个特征与含义
封装 1.英文为 encapsulation,实现信息隐藏: 2.把同一类事物的特性归纳到一个类中(属性和行为),隐藏对象的内部实现: 继承 1.英文为 inheritance: 2.继承的过程,是从 ...
- ES6 新增的一些东西
一.常量 不允许重复定义 const a='HELLO' const a='world'//报错Uncaught SyntaxError: Identifier 'a' has already bee ...
- C函数前向声明省略参数
这样的不带参数的函数声明,在c中是合法的,表示任意参数:当然我们自己写代码最好不要这样写了,但是读老代码还是会遇到: #include <stdio.h> void fun(); int ...
- 设计模式之笔记--单例模式(Singleton)
单例模式(Singleton) 定义 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. 类图 描述 类Singleton的构造函数的修饰符为private,防止用 ...
- java web 资源文件读取
前提:假设web应用test(工程名) webapps下面有一资源文件test.html 规则:在获取资源时一般使用的是相对路径,以符号/开头,而 / 代表什么取决于这个地址给谁使用.服务器使用时,/ ...
- [New learn]AutoLayout调查基于code
代码https://github.com/xufeng79x/TestAutolayout-code2 0.插在前面 必须关闭view的自动缩放掩码,自动缩放掩码是autolayout出现之前系统管理 ...
- leetcode 之Rotate List(18)
这题我的第一想法是用头插法,但实际上并不好做,因为每次都需要遍历最后一个.更简单的做法是将其连成环,找到相应的位置重新设头结点和尾结点.这过 有很多细节需要注意,比如K有可能是大于链表长度的,如何重新 ...
- 小程序 image跟view标签上下会有空隙
解决方案 就是可以在image那里设置vertical-align:top/bottom/text-top/text-bottom 原因:图片文字等inline元素默许是跟父级元素的baseline对 ...