[HNOI2004]Language L语言
2777: [HNOI2004]Language L语言
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 10 Solved: 5
[Submit][Status][Web Board]
Description
一段文章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下能够被理解的最长前缀的位置。
Input
之后的n行每行描述一个单词,再之后的m行每行描述一段文章。
其中1<=n, m<=20,每个单词长度不超过10,每段文章长度不超过1M。
Output
Sample Input
4 3
is
name
what
your
whatisyourname
whatisyouname
whaisyourname
Sample Output
14
6
0
//整段文章’whatisyourname’都能被理解
前缀’whatis’能够被理解
没有任何前缀能够被理解
HINT
Source
题解:
垃圾题目毁我青春,用trie树乱搞一下就好了。
#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 1049576
using namespace std;
int n,m,ans,tot;
char s[maxn];
int son[maxn][],sum[maxn];
bool f[maxn];
void insert()
{
scanf("%s",s+);
int p=;
for (int i=; s[i]; p=son[p][s[i]-'a'],i++) if (!son[p][s[i]-'a']) son[p][s[i]-'a']=++tot;
sum[p]=;
}
void change(int x)
{
int p=,aa=;
for (int i=x+; s[i]; i++)
{
int v=son[p][s[i]-'a'];
if (!v) return ;
else
{
if (sum[v]==) f[i]=true;
p=son[p][s[i]-'a'];
}
}
}
void work()
{
ans=;
scanf("%s",s+); memset(f,false,sizeof(f));
int len=strlen(s+); f[]=true; //cout<<" "<<len<<endl;
for (int i=; i<=len; i++)
{
if (f[i]==false) continue;
ans=i;
change(i);
}
cout<<ans<<endl;
}
int main()
{
cin>>n>>m;
for (int i=; i<=n; i++) insert();
for (int i=; i<=m; i++)
work();
}
[HNOI2004]Language L语言的更多相关文章
- 【HNOI2004】L语言
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- [HNOI2004][bzoj1212] L语言 [Trie+dp]
题面 传送门 思路 无后效性 显然,不管某个前缀的理解方式是怎么样的,如果它能被理解,那么前面的决策对于后面的决策而言都是等价的 因此这题可以DP DP方程 令$dp[i]$表示前缀i是否能被理解 那 ...
- 洛谷(cogs 1293/bzoj 1212) P2292 [HNOI2004]L语言
1293. [HNOI2004] L语言 ★★★ 输入文件:language.in 输出文件:language.out 简单对比时间限制:1 s 内存限制:162 MB [题目描述] ...
- BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1367 Solved: 598[Submit][Status ...
- 【BZOJ1212】[HNOI2004]L语言 Trie树
[BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...
- BZOJ 1212: [HNOI2004]L语言( dp + trie )
因为单词很短...用trie然后每次dp暴力查找...用哈希+dp应该也是可以的.... ------------------------------------------------------- ...
- 1212: [HNOI2004]L语言
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 643 Solved: 252[Submit][Status] ...
- BZOJ_1212_[HNOI2004]L语言_哈希
BZOJ_1212_[HNOI2004]L语言_哈希 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写 ...
- 洛谷 P2292 [HNOI2004] L语言 解题报告
P2292 [HNOI2004] L语言 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章\(T\)是由若干小写字母构成.一个单词 ...
随机推荐
- leetcode371
我这道题目真的是划水的,因为弄了很长时间发现,我可能对于位操作不是特别喜欢吧. 确实为了最求速度,位操作确实快一些. 单独从题目意思来说,用别的方式实现加法,我觉得吧,真的有点醉了...就这样. 下面 ...
- If only it could be all the same like we first me
为什么 你当时对我好 Why? You nice to me at that time. 又为什么 现在变得冷淡了 Why? Now you give a cold shoulder to me. 我 ...
- java导出和读取excel数据
使用的是poi的jar包 下载地址http://poi.apache.org/download.html 主要是把jar包导入,直接新建一个列子测试一下就明白了.使用起来还是比较方便的,代码里面的原理 ...
- Java Web 错误排查
排查404 1. 检查web.xml,有没有放在web-inf下面,再检查过滤器有没有配置 <filter> <filter-name>struts</filter-na ...
- JSP标签编程--简单标签
javax.servlet.jsp.tagext里的类SimpleTagSupport 使用SimpleTagSupport类一网打尽以往复杂的标签开发,直接使用doTag()方法 java文件: p ...
- make -jN
今天又一次尝试编译安卓,想测试一下编译的速度如何? 考虑机器是4核8线程,就用上了 make -j8,感觉上上速度是很快,刷屏就下来了,不过错误了,错误的提示大概是某个文件的规则没找到,想想了多线程并 ...
- 在 Android 中调用二进制可执行程序(native executable )
前几天有需要在java代码中调用二进制程序,就在网上找了些资料,写点东西记录下. Android 也是基于linux 的系统,当然也可以运行二进制的可执行文件.只不过Android 限制了直接的方式只 ...
- led.c驱动框架2nd
led.c: #include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> ; v ...
- HDU 5531 Rebuild
2015 ACM/ICPC 长春现场赛 E题 三分. 如果节点个数是奇数,那么直接列方程可以求解,因为,如果第一个圆半径变大,必然导致最后一个圆的半径变大, 所以,节点是奇数的时候,要么无解,要么只有 ...
- Android提高第十二篇之蓝牙传感应用
请问淘宝上买的单片机蓝牙模块与安卓/android手机通讯的时候需要设置UUID吗? 2013-02-15 09:39 在世张辽 | 浏览 2769 次 想用安卓手机和单片机通过蓝牙模块通讯, ...