【洛谷 P1666】 前缀单词 (Trie)
考试时暴搜50分。。。其实看到“单词”,“前缀”这种字眼时就要想到\(Trie\)的,哎,我太蒻了。
以一个虚点为根,建一棵\(Trie\),然后\(dfs\),
以当前点为根的答案就是\(Ans_u=(\prod_{\text{v是u的子树}}Ans_v)+\text{有单词以这个点结尾 ? 1 : 0}\),乘法原理嘛,如果有单词在这里结尾,那么就多一种情况:选这个单词且不选所有子树。
答案就是\(Ans_{\text{根}}\)
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define Open(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout);
#define Close fclose(stdin);fclose(stdout);
int n;
char a[60];
struct Trie{
Trie *son[27];
int p;
}*root = new Trie();
inline void Insert(){
int len = strlen(a + 1);
Trie *now = root;
for(int i = 1; i <= len; ++i){
if(now->son[a[i] - 'a'] == NULL)
now->son[a[i] - 'a'] = new Trie(), now->son[a[i] - 'a']->p = 0;
now = now->son[a[i] - 'a'];
}
now->p = 1;
}
long long dp(Trie *now){
long long sum = 1;
for(int i = 0; i < 26; ++i)
if(now->son[i] != NULL){
sum *= dp(now->son[i]);
}
return sum + now->p;
}
int main(){
Open("prefix");
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%s", a + 1), Insert();
printf("%lld\n", dp(root));
return 0;
}
【洛谷 P1666】 前缀单词 (Trie)的更多相关文章
- 洛谷 P1666 前缀单词 题解
题意:给n个单词,如果单词a为单词b的前缀则a,b不能共存,问能共存的集合数(包括空集) 一道dp题,排序后判断,f[i][j]表示i和j是否能共存,f[i][j]=1表示能共存,初始化dp[i]=1 ...
- 洛谷P2412 查单词 [trie树 RMQ]
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...
- P1666 前缀单词
P1666 前缀单词 tire树上跑dp 首先将trie树建出来,然后对于每个节点.考虑他的子节点. 子节点的方案数都互不干扰,所以子节点与其他子节点的的方案数可以利用乘法原理算出来. 然后如果这个节 ...
- Luogu1738 | 洛谷的文件夹 (Trie+STL)
题目描述 kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现. 洛谷的网页端,有很多文件夹,文件夹还套着文件夹. 例如:\(/luogu/application ...
- 洛谷.3065.第一!First!(Trie 拓扑)
题目链接 \(Description\) 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 \(Solution\) 一个单词想要排在第一,首先是没有其它字符串是它的前缀.那 ...
- 洛谷 P2353 背单词
题目背景 小明对英语一窍不通,令老师十分头疼.于是期末考试前夕,小明被逼着开始背单词…… 题目描述 老师给了小明一篇长度为N的英语文章,然后让小明背M个单词.为了确保小明不会在背单词时睡着,老师会向他 ...
- 【luogu P1666 前缀单词】 题解
题目链接:https://www.luogu.org/problemnew/show/P1666 10.13考试题 当时没想出来,觉得是要用trie做,在trie上跑一个树形dp 结果是写了个子集枚举 ...
- 洛谷P3966 [TJOI2013]单词(fail树性质)
P3966 [TJOI2013]单词 题目链接:https://www.luogu.org/problemnew/show/P3966 题目描述 小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单 ...
- P1666前缀单词
题目传送门点我传送 Ⅰ.字典树+树型DP 非常奇妙的一种解法 第一部分:构建树 先对来的单词读入,插入字典树 然后对于一颗字典树,其实是有很多无用边的,所以我们需要删去一些边 删去非单词节点和非单词节 ...
随机推荐
- Datetime与Datetime2的区别
Datetime: 时间格式,对应于数据库中的DateTime类型,对应于.NET里面的System. DateTime类型.DateTime支持日期从1753年1月1日到9999年12 ...
- How to find your web part
When we deploy a web part, we can find it on any pages through the follow steps: Firstly, ...
- CSS实现简易的轮播图
<html> <head> <meta charset="UTF-8"> <title></title> <sty ...
- ios下 active 演示激活
document.body.addEventListener('touchstart', function () { });
- [转]Git,SVN的优缺点及适合的范围,开源项目?公司项目?
使用git不久,粗浅理解: 1)适用对象不同.Git适用于参与开源项目的开发者.他们由于水平高,更在乎的是效率而不是易用性.Svn则不同,它适合普通的公司开发团队.使用起来更加容易. 2)使用的场合不 ...
- result returns more than one elements此种错误,解决
场景:公司产品开发完成后,接入第三方厂商,在进行接口联调的时候出现此问题.此接口报文中的每一个数据都要进行校验,有些是与已经存入产品数据库中的数据进行对比,看是否存在. 问题:在测试中,有些测试没有问 ...
- 小程序js脚本模块化调用
可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块.模块只有通过 module.exports 或者 exports 才能对外暴露接口. 1. common.js // common.j ...
- Spark搭档Elasticsearch
Spark与elasticsearch结合使用是一种常用的场景,小编在这里整理了一些Spark与ES结合使用的方法.一. write data to elasticsearch利用elasticsea ...
- Win7下搭建Zigbee开发环境
操作系统:64位Win7 芯片类型:Texas Instruments的CC2530 软件平台:IAR v8.10 Zigbee协议栈:ZStack-CC2530-2.5.1a CP2102 USB ...
- POJ 2166 Heapsort(递推)
Description A well known algorithm called heapsort is a deterministic sorting algorithm taking O(n l ...