[ZJOI2013]丽洁体

题目描述

平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子。这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中。许多同学都喜欢做这种题,因为较其它题显得有趣。仿写的句子往往具有“A__B__C”的形式,其中A,B,C是给定的由一个或多个单词组成的短句,空的部分需要学生填写。当然,考试的时候空在那里也是可以的。例如,“其实天不暗阴云终要散,其实 ,其实 ,其实路不远一切会如愿,艰难困苦的日子里我为你祈祷,请你保重每一天”。再比如,“见了大海的汹涌,没见过大山的巍峨,真是遗憾;见了大山的巍峨,没见过 ,还是遗憾。出发吧,永远出发。 ,人有不老的心情。”

由于现在是网络时代,我们不再只能仿写命题人命的题,我们可以仿写网上各种句子和段落。2011年3月26日,某人在博客上发布了的消息就惹来了很多人的仿写。

很难过吧。。。考得完爆了。。。

。。。。。。其实也没什么可以说的。。。都是蒟蒻的借口罢了。。。

。。。自己果然还只是半吊子水平呢。。。。

。。。祝大家都能进省队。。。其实只要不要有遗憾就好了呢。。。

虽然我很遗憾或许不能走下去了。。。。。

886

在网络上广泛流传的仿写,因为在某些地方有独到之处,大都被命名为“某某体”。打开人人,刷新微博,你也能发现这样和那样的体,比如,对不起体,**说明他爱你体等等。金先生注意到了这一现象,他敏锐地认为这是一个很有价值的研究课题,于是就其展开研究,打算发一篇paper。由于在网上发消息,人们有了更大的灵活度,人们有时因为表达的需要,还往原本固定的A, B, C中添加一些修饰的词语。这就给辨别一个句子或段落是否是另一个句子或段落的仿写增加了困难。

金先生现在研究一种形如“A*B*C”的体作品,其中A, B, C分别是某个由若干单词组成的短句,*代表0个或多个单词。他在网上找了大量的体作品,不过很多体作品不太合乎原作者的格式,也就是相当于在正规的体作品中插入了0个或多个单词。

由于数据量太大,金先生无法一个一个看过去,于是想请你帮忙,去掉尽量少的单词,使它成为指定的体。

输入输出格式

输入格式:

包含4行。

第一行是某个也许不规范的体作品T,

接下来三行分别代表A, B, C。

输出格式:

仅一行,包含一个数,即最少的去除单词数。

输入输出样例

输入样例#1:
复制

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

输出样例#1: 复制

2

说明

【样例说明】

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

规范的体形如:“要*太长了要*太短了”。

修改后的规范的体为:“要一直爱着某物的话,以妖怪之死来说太长了;要实现一切梦想的话,以人类之生来说太短了”。

【数据规模与约定】

对于20%的数据,1≤|T|, |A|, |B|, |C|≤10。 对于40%的数据,1≤|T|, |A|, |B|, |C|≤100。 对于70%的数据,1≤|T|, |A|, |B|, |C|≤1000。 对于100%的数据,1≤|T|, |A|, |B|, |C|≤50000;所有单词长度不超过5,出现次数不超过500;数据保证答案总存在。

先处理出A和C的,从前往后或从后往前扫一下

然后对于B

我们设f[i]表示B串中第i位匹配在T串中最晚在第几位

g[i]表示最小代价

根据贪心,i要与i-1位尽可能接近

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<vector>
 7 using namespace std;
 8 char s[250010];
 9 int T[250010],a[250010],b[250010],c[250010],sum,ans;
10 int f[250010],g[250010];
11 vector<int>Q[15000001];
12 void init(int *p)
13 {int i,j,x;
14   char ch=getchar();
15   int len=0;
16   while (ch!=‘\n‘)
17     {
18       s[++len]=ch;
19       ch=getchar();
20     }
21   for (i=1;i<=len;i=j+1)
22     {
23       j=i;x=0;
24       while (j<=len&&s[j]>=‘a‘&&s[j]<=‘z‘) x=x*27+s[j]-‘a‘+1,j++;
25       p[++p[0]]=x;
26     }
27 }
28 int main()
29 {int i,j;
30   init(T);init(a);init(b);init(c);
31   int l=1,r=T[0];
32   int x=1;
33   while (x<=a[0])
34     {
35       while (l<=T[0]&&a[x]!=T[l]) l++,sum++;
36       x++;l++;
37     }
38   x=c[0];
39   while (x>=1)
40     {
41       while (r>=1&&c[x]!=T[r]) r--,sum++;
42       x--;r--;
43     }
44   for (i=1;i<=b[0];i++)
45     Q[b[i]].push_back(i);
46   memset(g,127/3,sizeof(g));
47   ans=g[0];
48   for (i=l;i<=r;i++)
49     {
50       for (j=Q[T[i]].size()-1;j>=0;j--)
51     {
52       int x=Q[T[i]][j];
53       if (x==1) f[x]=i,g[x]=0;
54       else if (f[x-1]) f[x]=i,g[x]=g[x-1]+i-f[x-1]-1;
55     }
56       ans=min(ans,g[b[0]]);
57     }
58   cout<<ans+sum;
59 }

原文地址:https://www.cnblogs.com/Y-E-T-I/p/8503694.html

时间: 2024-10-03 20:29:21

[ZJOI2013]丽洁体的相关文章

[luogu] P3333 [ZJOI2013]丽洁体(贪心)

P3333 [ZJOI2013]丽洁体 题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其它题显得有趣.仿写的句子往往具有"A__B__C"的形式,其中A,B,C是给定的由一个或多个单词组成的短句,空的部分需要学生填写.当然,考试的时候空在那里也是可以的.例如,"其实天不暗阴云终要散,其实 ,其实 ,其实路不远一切会如愿,艰难困

bzoj 3214: [Zjoi2013]丽洁体

Description 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿 写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其它题显得有 趣.仿写的句子往往具有"A__B__C"的形式,其中A,B,C是给定的由一个或多个单词组成的短句,空的部分需要 学生填写.当然,考试的时候空在那里也是可以的.例如,"其实天不暗阴云终要散,其实 ,其实 ,其实路不远 一切会如愿,艰难困苦的日子里我为你祈

【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$

并不对劲的bzoj3214:p3333:[ZJOI2013]丽洁体

题目大意 有三个由若干个单词组成的字符串\(T,A,B,C(|T|,|A|,|B|,|C|\leq 5*10^4,单词长度\leq5,每个单词出现次数\leq500)\) 求从\(T\)中至少删去多少个单词,使\(T\)变成\(A*B*C\)的形式,其中\(*\)可以用若干个单词替换,输入数据保证有解 题解 发现删去若干个单词后,一个前缀变成了\(A\),一个后缀变成了\(C\),那么找到最短的有\(A\)为子序列的前缀和最短的有\(C\)为子序列的后缀就行 在剩下的部分中,找到最短的以\(B\

大明第一亲王陵明鲁王朱檀墓及出土瓷器

大明第一亲王陵――明鲁王朱檀墓及出土瓷器 济南 汪曦曦 鲁荒王朱檀是明洪武皇帝朱元璋第十子,为朱元璋与郭宁妃所生.史料记载朱檀生于洪武三年(1370年),出生两个月就被封为鲁王,洪武十八年就藩兖州.朱檀喜爱文学,谦恭下士,颇得朱元璋喜爱.但他同时痴迷长生不老之术,终日焚炉炼丹,日日吞服,结果"饵金石药,毒发伤目",导致双目失明,以至病入膏肓,不治身亡,时年仅18岁.朱元璋得知消息后,既恼怒,又悲伤,恼怒之余给了他一个恶谥――荒,因此朱檀谥号鲁荒王.朱檀死后,按照亲王礼制在今山东邹城城东

SPOJ8222 Substrings( 后缀自动机 + dp )

题目大意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值.F(1)..F(Length(S)) 建出SAM, 然后求出Right, 求Right可以按拓扑序dp..Right就是某个点到结束状态的路径数, parent树上last的那一条链都是结束状态...然后用Right去更新答案.. spoj卡常数..一开始用DFS就炸了, 改用BFS就A了.. (贴一下丽洁姐的题解: 我们构造S的SAM,那么对于一个节点s,它的长度范围是[Min(s),Max(s)],同时他的出

药浴一直伴随着瑶族人民瑶浴泡澡的美容养生功效 纯天然草本

如今,洗药浴已成为瑶族历史传统文化的一个重要组成部分,代代相传,人人喜爱.同时,让人欣慰的是,近几年"瑶族药浴"已走出深山.走向市场,"瑶族药浴"洗浴场馆在从江县城如雨后春笋涌现,多达十几家,促进了瑶族群众增收.县里还在县城规划用地300亩,拟建从江"瑶族药浴城",集洗浴.民族文化.民族饮食.住宿休闲为一体,打造瑶族药浴品牌,逐步走向产业化.规模化经营.日前,从江瑶族药浴被列为第二批国家级非物质文化遗产名录项目.分享于千年瑶浴养生馆加盟中心 药浴

BZOJ3926 ZJOI2015 诸神眷顾的幻想乡 后缀自动机+DFS

题意:给定一颗字符树,求树中路径所构成的不同的字符串的数量,其中AB和BA视作不同的字符串 题解: 题目里有这样一句话:太阳花田的结构比较特殊,只与一个空地相邻的空地数量不超过20个. 一共有10W个点,却只有20个叶子……因此树上所有的字串就是以叶子为起点搜索出的所有字串,丽洁姐真的好善良啊- -(无雾) 这样从每个点开始就能跑出来一颗Trie树,对Trie构造广义后缀自动机——每个节点看成是一个根,在后面加字符的时候和普通的SAM一样. 然后在SAM上用DFS统计不同字串的数量即可 #inc

3153: Sone1

这题网上题解比决战好像要多23333 先丢链接跪四位大爷 http://blog.csdn.net/iamzky/article/details/43494481 虽然理解之后大家都讲得很清晰 不过窝看了很久都木有看懂Orz 于是此篇题解尽量平易近人一些吧 窝突然想到一定会有人怀疑我做这种无脑数据结构题的意义…… 于是:我的人生,一片无悔~ ~~~~~吐槽时间~~~~~ 觉得杜教写法不太自然,然后写了个自然的,但是因为要维护子树信息……果断被教做人了 我猜我得调到十点了.一语成谶! 最后甚至都把