2007 Asia - Nanjing F题,字典树
差点就被这个题目RE疯掉(ノへ ̄、)。
字典树:保存字符串集合。
用一个二维数组ch[i][j] 保存节点i,到标号j的叶子节点是否存在。一般val[i] 表示节点 i 对应的附加权值。
这个题目,给一个字典,一个文本,看文本可以有多少种分解方法。
用DP做,DP方程 dp[i] = sum(dp[i+len[x]]) ; 从后往前。
dp[i] 是从字符 i 开始的后缀数组的分解方案, x 是一个单词,是从 i 以后的单词
我RE的地方是ch数组用的char型,然后我一直查数组范围,LRJ的代码,我比照了好久O(≧口≦)O。
- #include<cstring>
- #include<vector>
- using namespace std;
- const int maxnode = *+;
- const int sigma_size = ;
- struct Trie
- {
- int ch[maxnode][sigma_size];
- int val[maxnode];
- int sz; ///节点总数
- void clear()
- {
- sz = ;
- memset(ch[],,sizeof(ch[]));
- }
- int idx(char c)
- {
- return c-'a';
- }
- void insert(const char *s, int v)
- {
- int u = , n = strlen(s);
- for(int i = ; i < n; i++)
- {
- int c = idx(s[i]);
- if(!ch[u][c])
- {
- memset(ch[sz], , sizeof(ch[sz]));
- val[sz] = ;
- ch[u][c] = sz++;
- }
- u = ch[u][c];
- }
- val[u] = v;
- }
- ///找字符串s不超过len的前缀
- void find_prefixes(const char *s, int len, vector<int>& ans)
- {
- int u = ;
- for(int i = ; i < len; i++)
- {
- if(s[i] == '\0') break;
- int c = idx(s[i]);
- if(!ch[u][c]) break;
- u = ch[u][c];
- if(val[u] != ) ans.push_back(val[u]); // 找到一个前缀
- }
- }
- };
- #include<cstdio>
- const int maxl = +;
- const int maxw = +;
- const int maxwl = +;
- const int MOD = ;
- int d[maxl],len[maxw];
- char text[maxl],word[maxwl];
- Trie trie;
- int main()
- {
- //freopen("in.txt","r",stdin);
- int cases = ;
- int s;
- while(scanf("%s%d",text,&s)==)
- {
- trie.clear();
- for(int i=; i<=s; i++)
- {
- scanf("%s",word);
- len[i] = strlen(word);
- trie.insert(word,i);
- }
- memset(d,,sizeof(d));
- int L = strlen(text);
- d[L] = ;
- for(int i=L-; i>=; i--)
- {
- vector<int> p;
- trie.find_prefixes(text+i,L-i,p);
- for(int j=; j<p.size(); j++)
- {
- d[i] = (d[i]+d[i+len[p[j]]])%MOD;
- }
- }
- printf("Case %d: %d\n",cases++,d[]);
- }
- return ;
- }
2007 Asia - Nanjing F题,字典树的更多相关文章
- C#LeetCode刷题-字典树
字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树) 48.6% 中等 211 添加与搜索单词 - 数据结构设计 39.9% 中等 212 单词搜索 II 27.9% ...
- HDU1305 Immediate Decodability(水题字典树)
巧了,昨天刚刚写了个字典树,手到擒来,233. Problem Description An encoding of a set of symbols is said to be immediatel ...
- 2010辽宁省赛F(字典树,动态规划)
#include<bits/stdc++.h>using namespace std;int n,x;char s[10010];char a[31010];int val[100010] ...
- HDU1671 水题字典树
#include<cstdio> #include<cstdlib> #include<iostream> #include<cstring> #inc ...
- Good Firewall(字典树 HDU4760)
Good Firewall Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 4757 Tree(可持久化字典树)(2013 ACM/ICPC Asia Regional Nanjing Online)
Problem Description Zero and One are good friends who always have fun with each other. This time, ...
- HDU-4825 Xor Sum,字典树好题!
Xor Sum 一遍A了之后大呼一声好(keng)题!debug了两小时~~~~百度之星资格赛,可以. 题意:给你一个n个元素的数组,m次查询,每次输入一个数k要求从数组中找到一个数与k异或值最大,输 ...
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- Hihicoder 题目1 : Trie树(字典树,经典题)
题目1 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编 ...
随机推荐
- new XMLHttpRequest()和页面关系
1. 三个页面分别对应"自己“的异步对象(3个) <title></title> <script type="text/javascript&quo ...
- 利用MyEclipes的反转工程来配置Hibernate各种配置
首先需要有设计好的数据库,然后创建一个Web Project然后右键点击项目选择MyEclipse→add Hibernate Capabilities →→ →→,然后如果没有管理员的话需要在选择M ...
- Centos配置Caffe详解
http://www.tuicool.com/articles/uiuA3e
- c++的学习内容一汇总篇(常更新)
在这里假定读者们是有一定编程经验的.例如c#,java,c或者其他任何编程语言. 所有语言都无外乎掌握它的语法,熟悉它的一些库的调用. ---------------语法篇-------------- ...
- 说说oracle分页的sql语句
说说oracle分页的sql语句,分排序和不排序两种. 当结果集不需要进行排序时,每页显示条数为:rowPerPage,当前页数为:currentPage. 1. 相对来说,这种查询速度会快一些,因为 ...
- Android—监听器
网上有很多短信和电话监听的程序,使用Broadcast. 记得一年前自己对照视频和教材是能够实现的,这周打开视频和教材照猫画虎,无论怎么都不会,纠结啊! 问题原因: 3.0之后没有主动开启过的应用无法 ...
- C#抽象类及其方法的学习【转】
转至 http://www.cnblogs.com/flyinthesky/archive/2008/06/18/1224774.html 在C#中使用关键字 abstract 来定义抽象类和抽象方法 ...
- Angularjs之表单实例(三)
正确引用js css文件后可运行 <!DOCTYPE html> <html ng-app='myApp'> <head> <title>Bootstr ...
- COM编程之三 QueryInterface
[1]IUnknown接口 客户同组件交互都是通过接口完成的. 在客户查询组件的其它接口时,也是通过接口完成的.而那个接口就是IUnknown. IUnknown接口的定义包含在Win32SDK中的U ...
- Spring MVC 和 Spring 总结
1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...