LA3942 Remember the Word
题目链接:https://vjudge.net/problem/UVALive-3942
本篇是刘汝佳《算法竞赛入门经典——训练指南》的读书笔记(复述),详见原书 \(P209\) .
解题思路:
先用字典树维护字典中所有的单词。
定义 \(f(x)\) 为以长字符串中第 \(x\) 个字符开始的字符串的分解方案数,则 \(f(x) = sum{f(x+len(i))}\) ,其中 \(i\) 是该字符串的所有前缀。
用一种类似 \(DFS\) 的方式解决这个问题。
注意:书中的模数写错了。
AC代码:
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const ll mod = ;
const int maxn = +;
char inp[maxn];
struct Trie{
int ch[][];
int val[];
int sz;
void inserts(char *s,int v){
int u=,n=strlen(s);
for(int i=;i<n;i++){
int c=s[i]-'a';
if(!ch[u][c]){
memset(ch[sz],,sizeof(ch[sz]));
val[sz]=;
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=v;
}
};
Trie tree;
ll f[maxn]; ll solve(int head,int tail){
if(f[head]!=-) return f[head];
int now=;
ll ret=;
for(int i=head;i<tail;i++){
int c=inp[i]-'a';
int Next=tree.ch[now][c];
if(Next==){
f[head]=ret;
return ret;
}
if(tree.val[Next])
ret=(ret+solve(i+,tail))%mod;
now=Next;
}
f[head]=ret;
return ret;
}
int main(){
char word[];
int kase=;
while(scanf("%s",inp)==){
int S;
memset(f,-,sizeof(f));
tree.sz=;
memset(tree.ch[],,sizeof(tree.ch[]));
scanf("%d",&S);
while(S--){
scanf("%s",word);
tree.inserts(word,);
}
int tail=strlen(inp);
f[tail]=;
printf("Case %d: %lld\n",kase++,solve(,tail));
}
return ;
}
LA3942 Remember the Word的更多相关文章
- Uva1401(字典树)
1401 - Remember the Word Time limit: 3.000 seconds Neal is very curious about combinatorial problems ...
- Remember the Word,LA3942(Trie树+DP)
Trie树基础题,记录下代码. #include <cstdio> #include <cstring> #define MaxNode 4005*100 #define No ...
- UVALive - 3942 Remember the Word[Trie DP]
UVALive - 3942 Remember the Word Neal is very curious about combinatorial problems, and now here com ...
- Word/Excel 在线预览
前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...
- C#中5步完成word文档打印的方法
在日常工作中,我们可能常常需要打印各种文件资料,比如word文档.对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作.特别是提到Web打印,这的确会很棘手.一般如果要想选 ...
- C# 给word文档添加水印
和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力.文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭.前面我分享了如何给 ...
- 获取打开的Word文档
using Word = Microsoft.Office.Interop.Word; int _getApplicationErrorCount=0; bool _isMsOffice = true ...
- How to accept Track changes in Microsoft Word 2010?
"Track changes" is wonderful and remarkable tool of Microsoft Word 2010. The feature allow ...
- C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...
随机推荐
- Linux系统管理第五六七章 权限及归属管理 磁盘管理 文件系统与lvm
第五六七章 alias 查看系统别名 67 chmod 设置文件或目录的权限 -R表示以递归的方式设置目录及目录下的所有子目录及文件的权限 u:属主 g:属组 o:其他人 a:所有人 +:添加 ...
- 【三剑客】awk函数
1. 内置函数 awk的内置函数有算术.字符串.时间.位操作和其它杂项的函数. 1.1 算术函数 atan2(y,x) 返回弧度的反正切(y/x) cos(expr) 返回expr的余弦(以弧度形 ...
- Python中字符串输出带颜色
格式:\033[显示方式;前景色;背景色m 说明:前景色 背景色 颜色---------------------------------------30 ...
- 如何设计高并发web应用
所谓高并发,就是同一时间有很多流量(通常指用户)访问程序的接口.页面及其他资源,解决高并发就是当流量峰值到来时保证程序的稳定性. 我们一般用QPS(每秒查询数,又叫每秒请求数)来衡量程序的综合性能 ...
- 日日算法:Dijkstra算法
介绍 Dijistra算法作为一种最短路径算法,可以用来计算一个节点到图上其他节点的最短距离. 主要是通过启发式的思想,由中心节点层层向外拓展,直到找到中点. 适用于无向图和有向图. 算法思想 假设我 ...
- SQL语句学习(一)
这篇文章用来记录再学习SQL语句的过程. 首先,我们从简单的创建表开始.创建表的语法是CREATE TABLE 表名(列1的名字 列1的属性,列2的名字 列2的属性...); 如果希望将某一列作为 ...
- 使用JXL.jar实现JAVA对EXCEL的读写操作
简介: jxl.jar是通过java操作excel表格的工具类库 jxl操作excel包括对象Workbook(工作簿),Sheet(工作表) ,Cell(单元格). 一个excel就对应一个Work ...
- CodeForces - 140A New Year Table (几何题)当时没想出来-----补题
A. New Year Table time limit per test2 seconds memory limit per test256 megabytes inputstandard inpu ...
- 基于thinkphp3.2.3开发的CMS内容管理系统(二)- Rbac用户权限
基于thinkphp3.2.3开发的CMS内容管理系统 thinkphp版本:3.2.3 功能: --分类栏目管理 --文章管理 --商品管理 --用户管理 --角色管理 --权限管理 --友情链接管 ...
- Jmeter系列(9)- jmeter插件入门篇
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 jmeter4.0以上,如现在最 ...