☆【hnoi2004】L语言(题解)

L语言解释程序(计算机实习) c语言实现的一个L语言解释器,L语言自定义的一种简单编程语言。Integer定义整型变量,String定义字符串常量。ADD(a,b)加法,SUB(a,b)减法,MERGE(a,b)连接字符串,Out(a+b)输出,“;”语句分隔符,“#”结束符。编译提示出错行的位置和类型。 立即下载

题目描述

标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。
一段文章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(这里是指字符串容量不超过1M(兆),也就是字符串长度不超过10^6)。

输出格式

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

样例数据

input

4 3
is
name
what
your
whatisyourname
whatisyouname
whaisyourname

output

14
6
0

数据规模与约定

样例依次解释为:
整段文章’whatisyourname’都能被理解
前缀’whatis’能够被理解
没有任何前缀能够被理解
时间限制:1s
空间限制:256MB

思路:
用k数组来存前缀的长度,Trie+DP

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000010; 
int tot;
int k[MAXN];
string s;
string T; 
int n,m;
struct node
{
    char ch;
    bool endflag;
    int link[30];
}tree[MAXN];
void add(int k,int node)
{
    int chindex=s[k]-'a';
    if(!tree[node].link[chindex]) 
    {
        tree[node].link[chindex]=++tot;
        tree[tot].ch=s[k];
    }
    int nextnode=tree[node].link[chindex];
    if(k==s.size()-1)
    {
        tree[nextnode].endflag=true;
        return;
    }
    add(k+1,nextnode);
}
void find(int p)
{
    int len=T.size();
    int ans;
    k[0]=p;
    for(int i=0;i<=len;++i)
    {
        if(k[i]!=p) continue;
        else ans=i;
        for(int now=0,j=i;j<=len;++j)
        {
            int chindex=T[j]-'a';
            if(tree[now].endflag) k[j]=p;
            now=tree[now].link[chindex];
            if(!now) break;

        }
    }  

    printf("%d\n",ans);                     
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)
    {
        cin>>s;
        add(0,0);
    }
    for(int i=1;i<=m;++i)
    {
        cin>>T;
        find(i);
    }
    return 0;
}
L语言编译器.zip 编译原理课程设计,L语言编译器设计与实现,输入L语言,生成汇编代码,利用C++语言实现,分为词法分析,语法语义分析和汇编代码生成三部分,内有详细说明文档和分析,代码注释清晰 立即下载

相关推荐

Python实战:5分钟搞定滑动平均窗口计算(附完整代码+逐行注释)

本文深入解析Python中滑动平均窗口计算的实现与优化,提供Numpy、Pandas等多种高效方案,并附完整代码和逐行注释。涵盖边界处理、性能优化及异常检测等实战技巧,帮助开发者快速掌握时间序列数据处理的核心技术。

weixin_30872157的博客 124

7-10 L语言 PTA C++入门题答案

标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。 我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。 例如字典D中包括单词{‘is’, ‘name’, ‘what’, ‘your’},则文章‘whatisyourname’是在字典D下可以被理解的 因为它可以分成4个单词:‘what’, ‘is’, ‘

lifesize的博客 779

Intel网卡固件烧录实战:eeupdate与bootutil命令完全解析

固件作为硬件设备底层运行的软件,其稳定性直接决定硬件功能的完整性。网卡固件一旦损坏,常表现为MAC地址丢失、PXE启动失效、NVM数据异常导致降速或掉线。维护这类问题,需借助Intel官方工具eeupdate与bootutil在UEFI Shell或DOS环境下执行底层烧录操作。eeupdate负责网卡的身份信息与NVM存储管理,可重置MAC、恢复固件镜像;bootutil则专管启动行为,支持PXE配置与Boot Agent升级。从环境准备、命令参数到故障恢复,掌握这两款工具能让运维人员在修复存量网卡、应对

weixin_34269583的博客 311

L 语言(字典树)

标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章 是由若干小写字母构成。一个单词 也是由若干小写字母构成。一个字典 是若干个单词的集合。 我们称一段文章 在某个字典 下是可以被理解的,是指如果文章 可以被分成若干部分,且每一个部分都是字典 中的单词。 例如字典 中包括单词 is , your , what , name ,...

touso的博客 1482

MCNP 减方差技巧(最全)

MCNP的减方差技巧,核心在于不显著增加计算时间的前提下,通过修改模拟过程来降低结果的统计误差。尤其适用于,这类问题中粒子很难到达探测器区域,直接模拟效率极低栅元重要性是常用的减方差技巧,该方法主要对计算模型的不同区域定义不同的重要性数值。当粒子从重要性低的区域废物重要性高的区域,产生更多粒子,增大统计量;当从重要性高的区域进入重要性低的区域,会进行,增快计算效率。n= 中子,N;光子,P;电子 Exi= 栅元i的重要性I=栅元总数项目IMP卡是必须的,除非使用了WWN卡如果粒子进入0。

chencheng1127的博客 925

掌控板玩板指南1:初识掌控板、扩展板、Mind+编辑器

掌控板、I/O扩展板入门

好乐无荒之地 1万+

[HNOI2004] L语言

★ 输入文件:language.in 输出文件:language.out 简单对比 时间限制:1 s 内存限制:162 MB 【题目描述】 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可...

weixin_34026276的博客 317

RK3568平台(USB篇)USB基础知识

现象:把USB设备比如Android手机接到PC答1:是USB控制器,是USB控制器内嵌的root hub.答2. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序"。USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序。答3. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平USB设备的USB口内部,D-或D+接有1.5K的上拉电阻;

weixin_49303682的博客 1658

L脚本语言语法手册

L脚本语言语法手册

itmes的专栏 2952

17、超声散斑降噪与桌面系统背景估计技术

本文介绍了超声散斑降噪与桌面系统背景估计的先进技术。在超声成像方面,提出结合超分辨率(SR)和非线性扩散(ND)的方法,显著降低噪声并保留图像细节,在MSE和CNR指标上优于传统方法。在桌面交互系统中,针对传统背景估计因忽略设备像素结构导致的误差,提出基于显示器与相机像素结构建模的几何转换方法,有效减少尖锐边缘区域的误检,提升物体识别准确性。实验验证了两种方法的有效性,未来将致力于实时性优化与多设备兼容性扩展。

dream的博客 86

想在 Visual Studio Code 里进行 ABAP 开发,需要安装的扩展列表

安装完毕后,我们可以将 SAP 系统配置为 Visual Studio Code 连接的远程文件系统。为了连接到 SAP 系统,需要启用 ABAP 开发工具 (ADT) ICF 节点,这与 SAP Hana Studio 等工具使用的服务相同。打开 SAP GUI 并连接到目标系统,运行事务 SICF,然后激活 ADT_SRV 服务,如下所示。这启用了允许代码编辑器和 IDE 连接到 SAP 系统的服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3113

【HNOI2004】L语言

【HNOI2004】L语言 【题目描述】 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。 例如字典D中包括单词{‘is’, ‘

OI技术宅 1941

《UDS协议从入门到精通》系列——图解0x85:控制DTC的设置

如何让ECU停止或恢复DTC状态位更新?有哪些注意点?图解+示例教你快速上手UDS 0x85服务!!

车载系统攻城狮 3861

【巴蜀模拟试题】:L语言(difficult)

【巴蜀模拟试题】:L语言(difficult) Time Limit:10000MS  Memory Limit:65536K Total Submit:10 Accepted:2  Case Time Limit:1000MS Description 【背景描述】  标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。  一段文章T是由

985

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

字典树——L 语言

不完全思路:基本的思路就是,将所有的单词记录到字典树当中,对于要查询的文章,每查询到一个单词就要回跳到树的根节点处(即让p=0),接着查下一个,但这样子没法处理以下的样例。用一个二重循环枚举每一个已经合法的字符的下一个作为开头,匹配到不能再匹配为止,途中的所有单词都用一个st数组标记结尾字符的下标i作为一个合法的字符的位置,以供下一次匹配。回到外层循环时跳过1~3,答案更新为4,同时从5开始匹配,以此第外层循环到6时就是最终的答案。如果按照上面的的思路,得到的最大前缀只会是4,但答案实际应该是6。

测试 277

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

洛谷-P2292-L语言(字典树)

链接: https://www.luogu.org/problem/P2292 题意: 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的...

weixin_30294021的博客 265

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

洛谷 P2292 [HNOI2004] L 语言

不过我的代码经过实测,不加该优化也可以 AC,下面放的代码也是没有这个优化的。这是因为你至少需要长度为 90 的模式串才可能让当前长度能匹配,但是找不到这么长的模式串,所以再往后就更不可能了。标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。在跳失配数组的时候,其中很多对答案都没有贡献(即不在叶子结点的),所以。对于输入的每一篇文章,你需要输出一行一个整数,表示这段文章在字典。位能否被理解(能就是1,不能即为0),那么我们可以知道,如果。是若干个单词的集合。下是可以被理解的,是指如果文章。

xtys4574274584的博客 1058

[HNOI2004]L语言(洛谷 P2292)

[HNOI2004]L语言 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。 例如字典D中包括单词{‘is’, ‘name’, ‘...

不知所云的博客 680

【Trie】L 语言

【题目链接】: https://loj.ac/problem/10053 【题意】: 给出n个模式串。请问文本串是由多少个模式串组成的。 【题解】: 当我学完AC自动机后,发现这个题目也太简单了吧. 不过当时我还是不会,后来看了看洛谷有位大佬的题解。 简直醍醐灌顶。纯Trie树也能写出这个题来。 就是把对应的位置标记上,好比dp的转移。 这个转移是,开一个Mark数组,...

weixin_30835923的博客 148

Trie字典树-L语言

描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。 例如字典D中包括单词{‘is’, ‘name’, ‘what’, ‘your’},则文章‘whatisyourname’是在字典D下可以被理解的,因为它可以分成4个单词:‘what’, ‘is’,

weixin_46204099的博客 337

【HNOI 2004】L语言

算法标签:AC自动机

forever_dreams的博客 354

L语言(trie树+DP)

题目链接:https://www.luogu.org/problemnew/show/P2292 描述 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若...

Z 979

[HNOI2004]Language L语言

2777: [HNOI2004]Language L语言 Time Limit:10 SecMemory Limit:128 MBSubmit:10Solved:5[Submit][Status][Web Board] Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。一段文章T是由若干小写字母构成。...

weixin_30824599的博客 190

bzoj1212: [HNOI2004]L语言

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1212 思路:这题AC自动机都不用建,只要trie就好了。。。 首先令f[i]表示到i的前缀能否被理解,那么答案就是f[i]==1时最大的i 转移也很简单,如果f[i]==1,这个串就可以从i+1开始匹配一个新单词,因为单词长度<=10,暴力在trie上走就是了...

weixin_30602505的博客 172
上一篇: bzoj 1590 luogu2292 [USACO08DEC]秘密消息Secret Message(题解)
下一篇: KMP算法
bbbblzy
博客等级 码龄9年 45粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值