[HNOI2004] L语言_weixin_30767921的博客-程序员宅基地

★   输入文件:language.in   输出文件:language.out   简单对比
时间限制:1 s   内存限制:162 MB

【题目描述】

 

标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。

一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。

例如字典D中包括单词{‘is’, ‘name’, ‘what’, ‘your’},则文章‘whatisyourname’是在字典D下可以被理解的,因为它可以分成4个单词:‘what’, ‘is’, ‘your’, ‘name’,且每个单词都属于字典D,而文章‘whatisyouname’在字典D下不能被理解,但可以在字典D’=D+{‘you’}下被理解。这段文章的一个前缀‘whatis’,也可以在字典D下被理解,而且是在字典D下能够被理解的最长的前缀。

 

给定一个字典D,你的程序需要判断若干段文章在字典D下是否能够被理解。并给出其在字典D下能够被理解的最长前缀的位置。

 

【输入格式】

 

输入文件第一行是两个正整数n和m,表示字典D中有n个单词,且有m段文章需要被处理。之后的n行每行描述一个单词,再之后的m行每行描述一段文章。

其中1<=n, m<=20,每个单词长度不超过10,每段文章长度不超过1M。

 

【输出格式】

对于输入的每一段文章,你需要输出这段文章在字典D可以被理解的最长前缀的位置。

【样例输入】

4 3
is
name
what
your
whatisyourname
whatisyouname
whaisyourname

【样例输出】

 

14  整段文章’whatisyourname’都能被理解

6  前缀’whatis’能够被理解

0  没有任何前缀能够被理解

 

【提示】

本题目一共有十个测试点,每个测试点的分数为总分数的10%。对于每个测试点来说,如果你给出的答案正确,那么你将得到该测试点全部的分数,否则得0分。

运行时间1s内存使用640K

【来源】

HNOI2004

思路:字典树+类DP

//w和v组成字典,一般空间10……7就够了(其实是再大就M了,洛谷空间限制比COGS严格)。

代码实现:

 1 #include<cstdio>
 2 #include<cstring>
 3 #define k j+ch[i]-'a'
 4 int n,m,l,ws,ans;
 5 int w[30000000];
 6 bool v[30000000];
 7 char ch[1000010];
 8 bool c[1000010];
 9 void put_k(){
10     for(int i=0,j=0;i<l;i++){
11         if(!w[k]) w[k]=ws,ws+=26;
12         j=w[k];
13         if(i==l-1) v[j]=1;
14     }
15 }
16 void get_k(int q){
17     for(int i=q,j=0;i<l;i++){
18         if(!w[k]) return;
19         j=w[k];
20         if(v[j]) c[i]=true;
21     }
22 }
23 int main(){
24     freopen("language.in","r",stdin);
25     freopen("language.out","w",stdout);
26     scanf("%d%d",&n,&m),ws=26;
27     for(int i=1;i<=n;i++){
28         scanf("%s",ch),l=strlen(ch);
29         put_k();
30     }
31     for(int i=1;i<=m;i++){
32         memset(c,0,sizeof(c));
33         scanf("%s",ch),ans=0,l=strlen(ch);
34         get_k(ans);
35         for(int i=0;i<l;i++)
36         if(c[i]){
37             ans=i+1;
38             get_k(ans);
39         }
40         printf("%d\n",ans);
41     }
42     return 0;
43 }

题目来源:COGS,洛谷(并没有数据)

转载于:https://www.cnblogs.com/J-william/p/6609764.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30767921/article/details/96639275

智能推荐

<aop:aspectj-autoproxy /> 的用法-程序员宅基地

会默认调用jdk和cglib ,也可通过 proxy-target-class="false" 和proxy-target-class="true" 默认是jdk ,true 是 cglib 如果调用类不是接口是类会默认调用cglib。

5-201612-2- 工资计算-程序员宅基地

试题编号:201612-2试题名称:工资计算时间限制:1.0s内存限制:256.0MB问题描述:问题描述  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:  1) 个人所得税起征点...

页面获取服务器图片路径问题_怎么查页面上图片在服务器中的路径 可进服务器-程序员宅基地

在做页面上传时遇到这个问题,卡了很久,但是还是解决了,所以写下来给大家分享下。我的项目用的是ssh框架,服务器是Tomcat 7。一开始,不知道服务器上的图片不能用绝对路径访问,所以当我用绝对路径访问图片页面显示不了图片是很不解。后来百度之后才知道,把图片放到服务器上之后路径会改变,所以最好用相对路径。那么这个相对路径又是什么呢?这个就需要在server.xml中设置了:1.先找到_怎么查页面上图片在服务器中的路径 可进服务器

Java中的栈Stack、Deque、ArrayDeque、LinkedList_ITWUYI的博客-程序员宅基地

Java中的栈Stack、Deque、ArrayDeque、LinkedList1、Java中的Stack类栈是一种后进先出(LIFO)的容器,常用的操作push/pop/peek。Java中Stack类从Vector类继承,底层是用数组实现的线程安全的栈。不过Java中用来表达栈的功能(push/pop/peek),更适用的是使用双端队列接口Deque,并用实现类ArrayDeque/LinkedList来进行初始化。Deque<Integer> stack = new ArrayD

Maven配置_TraceurZzl的博客-程序员宅基地

一、Maven配置配置环境变量:点击新建:配置path:双击Path进行配置:_maven配置

C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序-程序员宅基地

C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序 了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。   今天介绍下我新完成的为Microchip的..._pic32串口 bootloader

随便推点

外部用户加入Teams 实时事件(Live Event)注意事项_teams.live-程序员宅基地

最近碰到很多跨国企业用Teams做live event的时候,外部用户无法加入的情况。那么微软自己有个文档写的比较全面。首先第一个问题:Live Event可以邀请公司外面的人吗?答:简单来说可以,不论是邀请公司以外的人作为producer或者presenter还是一般的viewer都是可以的。当然这个取决于管理员的设定以及live event组织者的设定,如果管理员限定了只能邀请特定的人或组,那用户是无法邀请全公司或者创建一个public 的event的:比如限制了不允许创建public的ev_teams.live

SUMOlympics_sumo 设置红绿灯约束条件-程序员宅基地

1、场景描述对单个道路划分为普通车道、有轨电车车道、公交车车道、自行车车道和人行道,定义相应的车辆和行人,并将该道路切分为2段,重命名为"beg"、“end”,其中“end”道路长度为100m,在分段节点处设置一个简易的红绿灯,其相位分别是“rrrrr”–100s,“GGGGG”–1000s(自定义),所有车辆和行人在红绿灯处准备出发,进行100m竞速比赛。2、利用NetEdit编辑器创建路网①创建单个道路,起点、终点坐标分别是(0,0),(1000,0)..._sumo 设置红绿灯约束条件

关于git使用Http和SSH的区别_git用http和ssh的区别-程序员宅基地

这是作为开发小菜鸟的我的第一篇博客,一直想写来着就是坚持不下去。今天算是一个开始吧。从去年8月份开始实习,公司一直使用git,只学会了一些基本操作,还有好多到现在也没弄明白。因为用的是组长得电脑,有好多东西之前组长就已经配置好了,我不用再去配置了。单页正因为这样,有好多东西都是组长的名字。我一直在git上导项目都是用的SSH路径,直接粘路径就可以了,但是每次提交代码到git都是组长的名字,我百..._git用http和ssh的区别

Linux版ZooKeeper安装_linux 单机离线安装zookper-程序员宅基地

ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。_linux 单机离线安装zookper

vue-cli2;vue配置开发,测试,生产环境api(打包方式)_cli2配置开发环境与生产环境-程序员宅基地

vue配置开发,测试,生产环境api(打包方式)想实现通过不同的命令,打包调用不同环境的API,实现实现前端自动化部署。前端自动化部署工程比较复杂,这里只介绍通过不同的命令,打包的时候调用不同环境的API,例如:npm run build调用开发环境接口,打包开发环境npm run build:test调用测试环境接口,打包测试环境npm run build:prod调用生产环境接..._cli2配置开发环境与生产环境

One To Many‘ attribute value type should not be ‘Comment‘_one to many' attribute value type should not be_KUIND_的博客-程序员宅基地

One To Many’ attribute value type should not be ‘Comment’今天在写项目的时候发现一直报这个错,有可能的原因是这个原因:我项目中使用的是spring data jpa ,框架会把该属性当成数据库的一个字段,而set不是mysql的数据类型;但是我自己的问题是忘记把实体类加上注解了entity的注解了,没加的话jpa不会将它识别为一个数据库的表,所以也会产生这个错误@Entity(name = "t_comment")@Tablepubl_one to many' attribute value type should not be

推荐文章

热门文章

相关标签