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是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编 ...
随机推荐
- JAVA-语法-运算符
1.赋值运算符 = (优先级较低) 2.算数运算符 + — * / % 3.字符串连接运算 + (把其他类型转成字符串并和字符串类型进行连接) 4.扩展赋值运算符 += — ...
- ACM/ICPC竞赛
ACM知识点分类 第一类:基础算法 (1) 基础算法:枚举,贪心,递归,分治,递推,构造,模拟 (2) 动态规划:背包问题,树形dp,状态压缩dp,单调性优化,插头dp (3) 搜索:dfs,bf ...
- Eclipse安装Ruby插件应该注意的几点
http://www.aptana.com/products/studio3/success_plugin.html Installing via Eclipse Please copy the fo ...
- android与后台请求的例子
public static ClientResponse SendClientRequest(List<BasicNameValuePair> params){ ClientRespons ...
- Android Preview显示
Android Studio的功能包含preview窗口, 可以查看布局(layout)的样式; 位置: app->src->main->res(资源)->layout(布局) ...
- myeclipse项目里有红色感叹号
myeclipse项目里有红色感叹号 这种情况是因为 .classpath 文件里面配置引用了某个jar,但是实际上你的 lib 里面并没有这个jar 所以才会有红色的提示. 不用拿.classpat ...
- Codeforces Round #312 (Div. 2) E. A Simple Task
题目大意就是给一个字符串,然后多个操作,每次操作可以把每一段区间的字符进行升序或者降序排序,问最终的字符串是多少. 一开始只考虑字符串中字符'a'的情况,假设操作区间[L,R]中有x个'a',那么一次 ...
- Android bindservice使用
package com.example.myact10; import com.example.myact10.MyService.MyBinder; import android.support.v ...
- java 虚拟机工具
jps 命令 可以查询开启了rmi服务的远程虚拟机进程状态. -v jvm参数. jstat -gcutil命令 [cangyue@/System/Library/Frameworks/JavaVM. ...
- word - 如何让 图片任意移动
选中图片, 设置图片的自动换行 为四周环绕型