BZOJ1212——L语言
题目大意:每一个字符串都可以分解成一些个单词组成,现在给你一些单词,再给你一个字符串,
dp吧,设f[i]为从0开始,到i结束的字符串前缀是否可以被分解,因为单词长度很小,所以,这就T了,
(什么逻辑),怎么才能不T呢,我们在转移的时候用Trie,可以把转移从O(100)优化成O(10),那么这就AC了
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; struct Trie{ int ch[1000][50]; int val[1000]; int len; char s[100]; char str[1000010]; int f[1000210]; int size; inline int num(char x){ return x - 'a'; } inline void insert(){ int u = 0; for(int i = 0; i < len; i ++){ int c = num(s[i]); if(!ch[u][c]){ ch[u][c] = ++ size; } u = ch[u][c]; } val[u] = 1; } inline void find(int e){ int u = 0; for(int i = 1; i <= len; i ++){ int c = num(s[i]); if(!ch[u][c]) return; u = ch[u][c]; if(val[u]) f[e + i] = 1; } return; } inline int dp(int l){ f[0] = 1; for(int i = 1; i <= 10; i ++) f[i] = 0; int gh = 0; for(int i = 0; i <= l; i ++){ f[i + 10] = 0; if(!f[i]) continue; if(i > gh) gh = i; for(int j = i; j <= min(i + 9, l - 1); j ++){ s[j - i + 1] = str[j]; } len = min(i + 9, l - 1) - i + 1; find(i); } return gh; } } wt; int main(){ int n, m; scanf("%d%d", &n, &m); for(int i = 1; i <= n; i ++){ scanf("%s", wt.s); wt.len = strlen(wt.s); wt.insert(); } for(int i = 1; i <= m; i ++){ scanf("%s", wt.str); int len = strlen(wt.str); printf("%d\n", wt.dp(len)); } return 0; }
BZOJ1212——L语言的更多相关文章
- bzoj1212 L语言
Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D ...
- [HNOI2004][bzoj1212] L语言 [Trie+dp]
题面 传送门 思路 无后效性 显然,不管某个前缀的理解方式是怎么样的,如果它能被理解,那么前面的决策对于后面的决策而言都是等价的 因此这题可以DP DP方程 令$dp[i]$表示前缀i是否能被理解 那 ...
- 【BZOJ1212】[HNOI2004]L语言 Trie树
[BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...
- 【BZOJ1212】L语言(AC自动机)
[BZOJ1212]L语言(AC自动机) 题面 BZOJ 题解 很自然的,既然要匹配单词,那就全部都丢到\(AC\)自动机里面去 现在想想怎么匹配 先是\(AC\)自动机正常的匹配 如果此时这个位置能 ...
- [bzoj1212][HNOI2004]L语言_AC自动机_动态规划
L语言 bzoj-1212 HNOI-2004 题目大意:给你一个n个单词的集合,然后给你m条字符串.问每条字符串可以被理解的最长前缀.被理解当且仅当存在一种分割使得每一段都是集合里的元素. 注释:$ ...
- bzoj1212: [HNOI2004]L语言(字典树)
1212: [HNOI2004]L语言 题目:传送门 题解: 看完题目之后就觉得可以暴力在字典树上之间询问,一开始还傻了以为用文章来建,肯定用单词啊: 那么我们可以用一个v数组表示当前字符串1~i的区 ...
- BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1367 Solved: 598[Submit][Status ...
- BZOJ 1212: [HNOI2004]L语言( dp + trie )
因为单词很短...用trie然后每次dp暴力查找...用哈希+dp应该也是可以的.... ------------------------------------------------------- ...
- [HNOI2004]Language L语言
2777: [HNOI2004]Language L语言 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 10 Solved: 5[Submit][S ...
随机推荐
- nginx 学习笔记(9) 配置HTTPS服务器--转载
HTTPS服务器优化SSL证书链合并HTTP/HTTPS主机基于名字的HTTPS主机带有多个主机名的SSL证书主机名指示兼容性 配置HTTPS主机,必须在server配置块中打开SSL协议,还需要指定 ...
- WinForm------RepositoryItemCheckEdit属性介绍
//去掉第三种状态 editcheck1.OptionView.NullStyle = UnChecked
- geoip scala api
#!/bin/bash /home/hadoop/spark-1.6.2/bin/spark-shell --master spark://hbase11:7077 --executor-memory ...
- 半透明状态栏(适用于搜索等)CSS样式
.search-{ -webkit-box-flex: ; -moz-box-flex:; text-align: left; font-size:14px; line-height:22px; he ...
- php爬虫 phpspider
<?php /** * Created by PhpStorm. * User: brady * Date: 2016/12/9 * Time: 17:32 */ ini_set("m ...
- HTML学习笔记——CSS初涉
1>嵌入式css写法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- Python capitalize()方法
Python capitalize()方法 capitalize()方法返回字符串的一个副本,只有它的第一个字母大写.对于8位的字符串,这个方法与语言环境相关. 语法 以下是capitalize()方 ...
- 11 Clever Methods of Overfitting and how to avoid them
11 Clever Methods of Overfitting and how to avoid them Overfitting is the bane of Data Science in th ...
- Unity中各个平台的预编译的运用方式
1,unity中官方文档的一个操纵关键词 Platform Dependent Compilation 2,常用的预编译关键词 UNITY_EDITOR 编辑器调用.UNITY_STA ...
- Method Swizzling (方法调配)
Method Swizzling是改变一个selector的实际实现的技术.通过这一技术,我们可以在运行时通过修改类的分发表中selector对应的函数,来修改方法的实现. 例如,我们想跟踪在程序中每 ...