博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2007 Asia - Nanjing F题,字典树
阅读量:6918 次
发布时间:2019-06-27

本文共 2156 字,大约阅读时间需要 7 分钟。

题目链接:

差点就被这个题目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
#include
using namespace std;const int maxnode = 4000*100+10;const int sigma_size = 26;struct Trie{ int ch[maxnode][sigma_size]; int val[maxnode]; int sz; ///节点总数 void clear() { sz = 1; memset(ch[0],0,sizeof(ch[0])); } int idx(char c) { return c-'a'; } void insert(const char *s, int v) { int u = 0, n = strlen(s); for(int i = 0; i < n; i++) { int c = idx(s[i]); if(!ch[u][c]) { memset(ch[sz], 0, sizeof(ch[sz])); val[sz] = 0; ch[u][c] = sz++; } u = ch[u][c]; } val[u] = v; } ///找字符串s不超过len的前缀 void find_prefixes(const char *s, int len, vector
& ans) { int u = 0; for(int i = 0; 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] != 0) ans.push_back(val[u]); // 找到一个前缀 } }};#include
const int maxl = 300000+10;const int maxw = 4000+10;const int maxwl = 100+10;const int MOD = 20071027;int d[maxl],len[maxw];char text[maxl],word[maxwl];Trie trie;int main(){ //freopen("in.txt","r",stdin); int cases =1 ; int s; while(scanf("%s%d",text,&s)==2) { trie.clear(); for(int i=1; i<=s; i++) { scanf("%s",word); len[i] = strlen(word); trie.insert(word,i); } memset(d,0,sizeof(d)); int L = strlen(text); d[L] = 1; for(int i=L-1; i>=0; i--) { vector
p; trie.find_prefixes(text+i,L-i,p); for(int j=0; j
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/5940245.html

你可能感兴趣的文章
鱼鹰软件签约活动管理专家蓝色方略
查看>>
Scott Schema创建脚本
查看>>
软件开发所用bug管理系统之mantis之windows版
查看>>
RHEL/CentOS6.6SSHD服务安装、配置、使用
查看>>
报错nginx failed error: during websocket handshake
查看>>
爬姓名大全网站的姓名
查看>>
ORA-01102: cannot mount database in EXCLUSIVE 处理方法
查看>>
linux下sshd_config的StrictModes参数
查看>>
华为底部虚拟导航栏挡住布局
查看>>
项目管理的几个概念(WBS、OBS、RBS、BOM、CWS、CA)总结与区分
查看>>
菜鸟眼中的vim 编译器
查看>>
数据库密码设置
查看>>
java:抽象类与接口的姻缘
查看>>
关于linux下部署项目时遇到MYSQL_ATTR_INIT_COMMAND未定义时解决办法
查看>>
Account
查看>>
PHP集成开发环境里面的www问题
查看>>
探秘Java9之类加载
查看>>
记一次 OpenIPMI core的分析
查看>>
MySQL误操作后如何快速恢复数据?
查看>>
Bash中which的用法
查看>>