day 1——字典树练习
cojs 173. 词链
★☆ 输入文件:link.in 输出文件:link.out 简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
给定一个仅包含小写字母的英文单词表,其中每个单词最多包含 50 个字母。
如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链。例如下面的单词组成了一个词链:
i
int
integer
而下面的单词不组成词链:
integer
intern
请在给定的单词表中取出一些词,组成最长的词链。最长的词链就是包含单词数最多的词链。
数据保证给定的单词表中,单词互不相同,并且单词按字典顺序排列。
【输入格式】
第一行一个整数 n ,表示单词表中单词数。
下接 n 行每行一个单词。
【输出格式】
一个整数,表示最长词链长度。
【输入输出样例】
输入:
link.in
5
i
int
integer
intern
internet
输出:
link.out
4
【数据范围】
50% 的数据, n<=1000
100% 的数据, n<=10000
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
#define N 10100
int n;
int ans=0;
int topt=0;
#define L 51
struct Trie{
int nxt[26];
int cnt;
}trie[L];
void dfs(int k,int pre_ans)
{
for(int i=0;i<26;++i)
if(trie[k].nxt[i])
{
dfs(trie[k].nxt[i],pre_ans+trie[k].cnt); //在树的一条边上深搜,看一条边上最多的标示符是出现了几次,这就是最长的链表
}
ans=max(pre_ans+trie[k].cnt,ans); //取大
}
void build(char *str)//建立一个单词的树
{
int now=0;
while(*str)
{
if(!trie[now].nxt[*str-'a']) //now储存当前在第几行,str指针指向单词的第0~strlen(s)个元素,nxt[0~25]代表a,b,c……x,y,z在本行有没有出现过
// 如果没有的话就建立一棵新树,有的话就继续往下走
trie[now].nxt[*str-'a']=++topt;
now=trie[now].nxt[*str-'a'];
str++;
}
trie[now].cnt++; //只在单词的末尾加一个标识符
}
void input()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
char s[L];
scanf("%s",s);
build(s);
}
dfs(0,0);
printf("%d\n",ans);
}
int main()
{
freopen("link.in","r",stdin);
// freopen("link.out","w",stdout);
input();
// fclose(stdin);fclose(stdout);
return 0;
}
day 1——字典树练习的更多相关文章
- 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)
前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
- 山东第一届省赛1001 Phone Number(字典树)
Phone Number Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 We know that if a phone numb ...
- 字典树 - A Poet Computer
The ACM team is working on an AI project called (Eih Eye Three) that allows computers to write poems ...
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...
- HDU1671 字典树
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- *HDU1251 字典树
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- LA 3942 - Remember the Word (字典树 + dp)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
随机推荐
- Spring-MongoDB 关键类的源码分析
本文分析的是 spring-data-mongodb-1.9.2.RELEASE.jar 和 mongodb-driver-core-3.2.2.jar. 一.UML Class Diagram 核心 ...
- Rails 定时任务——whenever实现周期性任务
根据项目的进展,我们需要实现后台进行定时读取信息的功能,而最关键的实现部分是周期性功能,根据调研,决定使用whenever来实现这一功能. github:https://github.com/java ...
- 【福大软工】 W班级总成绩排名3
评分链接: alpha测试 软件产品案例分析 总分排名: 团队千帆竞发图 总结: 本次排名是alpha测试 软件产品案例分析 两次排名的汇总. 1.alpha测试小组评价: 听说:10篇冲 ...
- beta冲刺3
一,昨天的问题: 页面整理还没做 我的社团这边的后台数据库未完成,前端代码修改未完成. 二,今天已完成 页面整理基本完成,把登陆独立出来了,然后基本处理掉了多余页面(反正也没几个--) 我的社团这边试 ...
- Alpha冲刺集合
Alpha冲刺集合 Day1 http://www.cnblogs.com/bugLoser/p/7901016.html Day2 http://www.cnblogs.com/bugLoser/p ...
- 20162323周楠《Java程序设计与数据结构》第五周总结
20162323周楠 2016-2017-2 <程序设计与数据结构>第五周学习总结 教材学习内容总结 1.面向对象软件设计的基本部分是确定程序中应该创建哪些类: 2.面向对象程序设计的核心 ...
- 从一次输入框无法输入的bug,谈如何限制输入框输入类型
bug的产生和修改 上周临近周末休息的时候,一个同事跑过来了,对我说:"阿伦啊,有一个页面出问题了,火狐浏览器所有的input都没法输入了."我一听,是不是你给加了什么属性,让in ...
- 鼠标滑过切换div显示(鼠标事件)
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Mego(06) - 关系数据库建模
框架中提供了多种数据注释以便可以全面的描述数据库结构特性. 自增列 可以使用注释声明指定列是数据库自增列,同时能指定自增的起始及步长. public class Blog { [Identity(, ...
- 在WebStorm中启动Angular项目
点击配置 创建 选择命令 package.json 运行 查看运行结果