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 le

Sample Output

2
【样例说明】
在上述样例中,不规范的体作品为:“想要一直爱着某物的话,以妖怪之死来说太长了;想要实现一切梦想的话,以人类之生来说太短了”。
规范的体形如:“要*太长了要*太短了”。
修改后的规范的体为:“要一直爱着某物的话,以妖怪之死来说太长了;要实现一切梦想的话,以人类之生来说太短了”。

HINT

Source

[Submit][Status][Discuss]

单词长度不超过5显然就是给我们哈希的,这样就成了字符匹配问题了。

“A和C贪心即可,B在中间枚举搞一搞就好了”

然而发现并不会搞一搞。

f[i]表示到当前为止最靠右的b[i]在哪里,g[i]表示到此为止最少要删多少个单词,每次转移更新一次答案,正确性不难证。

感觉就是先想出一个感觉很不靠谱的做法,然后证明它是靠谱的。

拉链哈希很不熟啊。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define rep(i,l,r) for (int i=l; i<=r; i++)
 5 using namespace std;
 6
 7 const int N=100100,inf=0x3f3f3f3f,P=2010527;
 8 int n,la,lb,lc,i,j,k,l,r,nd,sum,ans=inf,s[N],a[N],b[N],c[N];
 9 int v[N],nxt[N],Nxt[N],h[N],H[P],f[N],g[N];
10
11 int Hash(int x){
12     int y=H[x%P];
13     while (v[y]!=x && y) y=Nxt[y];
14     if (v[y]==x) return y;
15     v[++nd]=x; Nxt[nd]=H[x%P]; H[x%P]=nd;
16     return nd;
17 }
18
19 int find(int x){
20     int y=H[x%P];
21     while (v[y]!=x && y) y=Nxt[y];
22     return y;
23 }
24
25 void getstr(int s[],int &n){
26     int x=0; char ch=getchar();
27     for (; ch!='\n'; ch=getchar())
28         if (ch>='a' && ch<='z') x=x*26+ch-'a';
29         else s[++n]=x,x=0;
30     if (x) s[++n]=x;
31 }
32
33 int main(){
34     freopen("bzoj3214.in","r",stdin);
35     freopen("bzoj3214.out","w",stdout);
36     getstr(s,n); getstr(a,la); getstr(b,lb); getstr(c,lc);
37     for (i=1; i<=lb; i++) k=Hash(b[i]),nxt[i]=h[k],h[k]=i;
38     for (l=i=1; i<=la; l++) if (s[l]==a[i]) i++; else sum++;
39     for (r=n,i=lc; i; r--) if (s[r]==c[i]) i--; else sum++;
40     memset(g,0x3f,sizeof(g));
41     for (i=l; i<=r; i++){
42         for (j=h[find(s[i])]; j; j=nxt[j])
43             if (j==1) f[1]=i,g[1]=0;
44                 else if (f[j-1]) f[j]=i,g[j]=g[j-1]+i-f[j-1]-1;
45         ans=min(ans,g[lb]);
46     }
47     printf("%d\n",ans+sum);
48     return 0;
49 }

转载于:https://www.cnblogs.com/HocRiser/p/8761159.html

[BZOJ3214][ZJOI2013]丽洁体(Hash+DP)相关推荐

  1. bzoj3214 [Zjoi2013]丽洁体 dp

    把单词全hash出来,比ac自动机匹配方便多了.. 首先A和C直接贪心就可以了 然后可以可以根据特殊数据:每个词出现次数上限500: 每个相同的词可以对应不一样的位置,所以只需要记录在哪些位置出现过, ...

  2. Monkey and Banana HDU - 1069 [ 结构体排序+DP最长不上升子序列 ] 详细题解

    题解目录 1.题目 2.题意 3.思路 4.代码 1.题目 A group of researchers are designing an experiment to test the IQ of a ...

  3. CF7D-Palindrome Degree【字符串hash,dp】

    正题 luogu链接:https://www.luogu.org/problemnew/show/CF7D 题目大意 定义kkk级回文串为一个字符串的(1,⌊n/2⌋)(1,\lfloor n/2 \ ...

  4. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  5. [BZOJ3110~3115]ZJOI2013

    本人未参与过ZJOI2013,前两场学校里的模拟赛用了day1day2试题,day2很开心地被初三神犇学弟虐了-- DAY1 T1 [BZOJ3110]K大数查询 直接树套树,或分治. #includ ...

  6. 20200515省选模拟赛B、幻化成风(毒瘤容斥题+构造容斥系数+生成函数+hash状压DP+Trie树优化背包)

    题解 花了一上午+一中午终于把这道题A了 首先,我们要求的是bi互不相同的合法方案数 我们可以枚举一个a的集合S,来强制里面的b全部都相同,然后其它的随便放 由于这个题的n的约数非常多,我们可以把它质 ...

  7. hdoj1160【DP】

    现在还很弱,贴一个我bin的结题报告日后写到一定会了加油 说说感觉,读题不读好,然后读完想不出,知道是dp不好好想,先排序一列,再求另一列,dp[ i ]代表长度,那么需要输出整个序列需要路径和一个标 ...

  8. WC2015 酱油记

    这是真·酱油记! Day0 因为我们在上海,所以只要坐高铁就可以了2333.到了火车站以后我们坐大巴到学军中学恩,结果坐大巴的时间和做坐高铁的时间差不做←_←. 吐槽了一下住宿环境和课程表就已经晚上了 ...

  9. 抖音、腾讯、阿里、美团春招服务端开发岗位硬核面试(完结)

    在上一篇 我们中,我们分享了几大互联网公司面试的题目,本文就来详细分析面试题答案以及复习参考和整理的面试资料,小民同学的私藏珍品????. 首先是面试题答案公布,在讲解时我们主要分成如下几块:语言的基 ...

最新文章

  1. Kickstart的配置文件anaconda-ks.cfg解析
  2. Struts2中action获取request、response、session的方式
  3. st 串口烧写工具 芯片_STM32芯片的几种烧写方式简介
  4. 《linux内核完全剖析:基于0.12内核》读书笔记一
  5. R语言实战应用-lightgbm 算法优化:不平衡二分类问题(附代码)
  6. 为什么linux的TTY登录程序getty/agetty一般都会设置一个-L的option?
  7. C语言学习之利用指针输出二维数组任一行任一列元素的值
  8. 英特尔重磅开源OpenVINO™ !附送的预训练模型是最大亮点
  9. STM32F407之资源
  10. php 中tp3.2中c,thinkphp3.2笔记(2)调试模式,配置项C,创建模块, 四种URL模式,URL生成,跳转...
  11. linux能不能上网页,详解能上QQ不能打开网页的问题
  12. c语言标准之c99下载,C语言标准中的C99与最新的C11
  13. IT公司、软件公司资质
  14. Typora上传图片终于解决了
  15. 解释什么是啸叫,为什么会发生啸叫,啸叫的为何和如何防止啸叫
  16. 投影坐标系、大地坐标系(地理坐标系)
  17. 《灵魂的微笑》读后感
  18. 零失误绕制无线充电线圈
  19. ggplot2-为可视化建模2
  20. 关于华硕飞行堡垒7安装win10+ubuntu双系统失败后转用win10子系统ubuntu的总结

热门文章

  1. Bit-Z亮相巴厘岛XBlockchain峰会
  2. android-async-http 源码分析
  3. android 代码加view,Android中将View添加至窗口的源码分析
  4. Qt 视图框架示例 Colliding Mice 的翻译
  5. Qt 互斥锁 QMutex 的简单应用
  6. slickgrid 中ajax,slickgrid.js 一种高性能web数据表格组件的探讨
  7. 一位大学教师对学生的建议:如何做好研究
  8. Luogu P4708 画画 (Burnside引理、组合计数)
  9. Codeforces 235C Cyclical Quest (后缀自动机)
  10. 你我他科技php面试题,北京科大”携手你我他”, “励”行爱加艾減公益